Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;OpenCV视频处理_C++_C_Opencv - Fatal编程技术网

C++ C/C++;OpenCV视频处理

C++ C/C++;OpenCV视频处理,c++,c,opencv,C++,C,Opencv,大家好!所以目前我正在做一个视频处理项目,所以我决定尝试一下OpenCV。由于我是新手,我决定找几个示例代码并测试它们。第一个是C OpenCV,看起来像这样: #include <opencv/cv.h> #include <opencv/highgui.h> #include <stdio.h> int main( void ) { CvCapture* capture = 0; IplImage *frame = 0; if (!(cap

大家好!所以目前我正在做一个视频处理项目,所以我决定尝试一下OpenCV。由于我是新手,我决定找几个示例代码并测试它们。第一个是C OpenCV,看起来像这样:

#include <opencv/cv.h>
#include <opencv/highgui.h>

#include <stdio.h>

int main( void ) {

CvCapture* capture = 0;
IplImage *frame = 0;

    if (!(capture = cvCaptureFromCAM(0)))
    printf("Cannot initialize camera\n");

cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE);

while (1) {

    frame = cvQueryFrame(capture);
    if (!frame)
        break;

    IplImage *temp = cvCreateImage(cvSize(frame->width/2, frame->height/2), frame->depth, frame->nChannels); // A new Image half size

    cvResize(frame, temp, CV_INTER_CUBIC); // Resize
    cvSaveImage("test.jpg", temp, 0); // Save this image
    cvShowImage("Capture", frame); // Display the frame
    cvReleaseImage(&temp);
    if (cvWaitKey(5000) == 27) // Escape key and wait, 5 sec per capture
        break;
}

cvReleaseImage(&frame);
cvReleaseCapture(&capture);

return 0;
#包括
#包括
#包括
内部主(空){
CvCapture*capture=0;
IplImage*frame=0;
如果(!(capture=cvCaptureFromCAM(0)))
printf(“无法初始化照相机\n”);
cvNamedWindow(“捕获”,CV_窗口_自动调整大小);
而(1){
帧=cvQueryFrame(捕获);
如果(!帧)
打破
IplImage*temp=cvCreateImage(cvSize(帧->宽度/2,帧->高度/2),帧->深度,帧->通道);//新图像的一半大小
cvResize(帧、温度、CV_INTER_CUBIC);//调整大小
cvSaveImage(“test.jpg”,temp,0);//保存此图像
cvShowImage(“捕获”,帧);//显示帧
cvReleaseImage(&temp);
if(cvWaitKey(5000)==27)//转义键并等待,每次捕获5秒
打破
}
cvReleaseImage(&frame);
cvReleaseCapture(&capture);
返回0;
}

所以,这一个工作非常好,并存储图像到硬盘驱动器很好。但是问题是从下一个样本开始的,它使用C++ OpenCV:< /P>
#include "opencv2/opencv.hpp"
#include <string>

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
        return -1;

    Mat edges;
    //namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        cvtColor(frame, edges, CV_RGB2XYZ);
        imshow("edges", edges);
    //imshow("edges2", frame);
    //imwrite("test1.jpg", frame);
        if(waitKey(1000) >= 0) break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}
#包括“opencv2/opencv.hpp”
#包括
使用名称空间cv;
int main(int,char**)
{
VideoCapture cap(0);//打开默认摄像机
if(!cap.isopend())//检查我们是否成功
返回-1;
垫边;
//名称(“边缘”,1);
对于(;;)
{
垫架;
cap>>帧;//从相机获取新帧
CVT颜色(框架、边缘、CV_RGB2XYZ);
imshow(“边”,边);
//imshow(“边缘2”,框架);
//imwrite(“test1.jpg”,框架);
如果(waitKey(1000)>=0)中断;
}
//摄像机将在VideoCapture析构函数中自动解除初始化
返回0;
}
所以,是的,一般来说,在显示视频(图像帧)方面几乎没有变化,但当涉及到使用im**功能时,会出现一些问题

使用cvSaveImage()效果很好,但当我尝试使用imwrite()时,“访问冲突读取位置”会出现未处理的异常。当我尝试加载图像时,imread()也是如此

所以,我想问的是,有没有可能使用C OpenCV的大部分功能?还是有必要使用C++ OpenCV。如果是,我前面描述的问题是否有解决方案


同样如上所述,图像最初是BGR格式的,因此需要进行转换。但进行BGR2XYZ转换似乎会反转颜色,而RGB2XYZ则会保留它们。示例:

还是需要使用C++ OpenCV?< /P> 不,没有任何必要。你可以使用任何你喜欢的界面,你认为你很擅长它(OpenCV提供C,C++,Python接口)。p> 有关

imwrite()
imread()
的问题:

对于彩色图像,顺序通道通常为蓝色、绿色、红色,如下所示 是imshow()、imread()和imwrite()所期望的


引用自的

可能重复的,请向我们展示导致异常的代码。@Seckin Savasci,当我取消注释
//imwrite(“test1.jpg”,frame)时行,它会导致异常。@Monceber关于
imread()
?类似这样的内容:
Mat img=imread(“test.jpg”),我尝试了使用扩展和不使用扩展-它仍然会导致异常,但这里的问题是它根本不写或读图像,而是正确地显示它们。如果图像已保存,但未正确显示,则颜色通道会出现问题。如果已经加载,我应该如何更改图像颜色通道的顺序?我刚才尝试在保存之前将图像从BGR转换为RGB,使用
cvtColor(帧、边、CV_BGR2RGB),但仍然存在异常(在我问题的第二个代码段中,有两个调用(一个已注释)imshow(),它们都将拍摄的帧输出到新窗口。@Monceber顺便说一句,您的第一次转换有问题,您应该使用BGR2XYZ而不是RGB2XYZand。现在我很困惑…我已经为图像结果制作了一些屏幕截图…这是屏幕截图,所以仍然无法保存(正常指没有任何转换的图像)。