Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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++;使用OpenCV崩溃_C_Opencv_Windows Xp_Dev C++ - Fatal编程技术网

开发C++;使用OpenCV崩溃

开发C++;使用OpenCV崩溃,c,opencv,windows-xp,dev-c++,C,Opencv,Windows Xp,Dev C++,我正在编写一个简单的算法,将我的网络摄像头中的RGB图像转换为HSV,它编译得很好,但在执行.exe时崩溃 #include <cv.h> #include <highgui.h> int main(int argc, char** argv) { // Cria uma janela. cvNamedWindow("imagem", CV_WINDOW_AUTOSIZE); // Cria a conexão com a webcam

我正在编写一个简单的算法,将我的网络摄像头中的RGB图像转换为HSV,它编译得很好,但在执行.exe时崩溃

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

int main(int argc, char** argv)
    {
     // Cria uma janela.
    cvNamedWindow("imagem", CV_WINDOW_AUTOSIZE);
    // Cria a conexão com a webcam.
    CvCapture *capture = cvCreateCameraCapture(0);
    // Variável que armazena o frame.
    IplImage *frame;
    IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);
    while(1)
        {
        // Variável  recebe o frame.
        frame = cvQueryFrame(capture);
        if(!frame) break;
        cvCvtColor(frame, imghsv, CV_BGR2HSV);
        // Exibe o frame na janela.
        cvShowImage("imagem", frame);
        cvShowImage("hsv", imghsv);
        // Encerra o loop com uma tecla.
        if( cvWaitKey(100) == 27 ) break;
    }
    // Libera a memória utiliazada.
    cvReleaseImage(&frame);
    cvReleaseImage(&imghsv);
    cvReleaseCapture(&capture);
    // Fecha a janela.
    cvDestroyWindow("imagem");
    cvDestroyWindow("hsv");
}
#包括
#包括
int main(int argc,字符**argv)
{
//哎呀,乌玛珍娜。
cvNamedWindow(“imagem”,CV_窗口_自动调整大小);
//Cria a conexão com网络摄像头。
CvCapture*capture=cvCreateCameraCapture(0);
//瓦里亚维尔·阿玛泽纳·阿马泽纳·阿马泽纳·阿马泽纳·阿马泽纳。
IplImage*框架;
IplImage*imghsv=cvCreateImage(cvGetSize(帧),8,3);
而(1)
{
//可变电平接收框。
帧=cvQueryFrame(捕获);
如果(!帧)中断;
CVT颜色(框架、imghsv、CV_BGR2HSV);
//珍妮拉。
cvShowImage(“imagem”,帧);
cvShowImage(“hsv”,imghsv);
//这是一个很好的例子。
如果(cvWaitKey(100)=27)断开;
}
//利用自由。
cvReleaseImage(&frame);
cvReleaseImage(&imghsv);
cvReleaseCapture(&capture);
//费卡·贾内拉。
CVM窗口(“imagem”);
CVV(“hsv”);
}
如果没有行“IplImage*imghsv=cvCreateImage(cvGetSize(frame),8,3);”,则.exe可以工作,但算法只显示我的图像

我在WindowsXP SP3中使用DEV C++ 4.92.2和OpenCV 2.1。 关于英语,我很抱歉。 谢谢

更换
IplImage*框架解决了问题
IplImage*frame=cvQueryFrame(捕获)

IplImage *frame;
IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);
您的
图像尚未分配,您不应在实际抓取帧之前创建hsv图像

另请注意:

您不应该释放从
cvQueryFrame()
抓取的图像,OpenCV会处理它

从OpenCV文档中:

函数cvQueryFrame从相机或视频文件中获取帧,解压缩并返回。此函数只是GrabFrame和RetrieveFrame的组合,但在一个调用中用户不应发布或修改返回的图像。发生错误时,返回值可能为空

您还应该检查
cvCreateCameraCapture
的返回值,该值可以是
NULL

IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);

您应该使用
IPL\u DEPTH\u 8U
而不是
8

此代码工作正常。。。代码中缺少一些行。。。看一看

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

int main(int argc, char** argv)
    {
     // Cria uma janela.
    cvNamedWindow("imagem", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("hsv", CV_WINDOW_AUTOSIZE);  // added in orig code
    // Cria a conexão com a webcam.
    CvCapture *capture = cvCreateCameraCapture(0);
    // Variável que armazena o frame.
    IplImage *frame;
    IplImage* imghsv;
//    IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);
    while(1)
        {
        // Variável  recebe o frame.
        frame = cvQueryFrame(capture);
        imghsv = cvCreateImage(cvGetSize(frame),8,3);  /// changed from orig code.
        if(!frame) break;
        cvCvtColor(frame, imghsv, CV_BGR2HSV);
        // Exibe o frame na janela.
        cvShowImage("imagem", frame);
        cvShowImage("hsv", imghsv);
        // Encerra o loop com uma tecla.
        if( cvWaitKey(100) == 27 ) break;
    }
    // Libera a memória utiliazada.
    cvReleaseImage(&frame);
    cvReleaseImage(&imghsv);
    cvReleaseCapture(&capture);
    // Fecha a janela.
    cvDestroyWindow("imagem");
    cvDestroyWindow("hsv");
}
#包括
#包括
int main(int argc,字符**argv)
{
//哎呀,乌玛珍娜。
cvNamedWindow(“imagem”,CV_窗口_自动调整大小);
cvNamedWindow(“hsv”,CV_WINDOW_AUTOSIZE);//添加到原始代码中
//Cria a conexão com网络摄像头。
CvCapture*capture=cvCreateCameraCapture(0);
//瓦里亚维尔·阿玛泽纳·阿马泽纳·阿马泽纳·阿马泽纳·阿马泽纳。
IplImage*框架;
IplImage*imghsv;
//IplImage*imghsv=cvCreateImage(cvGetSize(帧),8,3);
而(1)
{
//可变电平接收框。
帧=cvQueryFrame(捕获);
imghsv=cvCreateImage(cvGetSize(frame),8,3);///已从原始代码更改。
如果(!帧)中断;
CVT颜色(框架、imghsv、CV_BGR2HSV);
//珍妮拉。
cvShowImage(“imagem”,帧);
cvShowImage(“hsv”,imghsv);
//这是一个很好的例子。
如果(cvWaitKey(100)=27)断开;
}
//利用自由。
cvReleaseImage(&frame);
cvReleaseImage(&imghsv);
cvReleaseCapture(&capture);
//费卡·贾内拉。
CVM窗口(“imagem”);
CVV(“hsv”);
}

崩溃的问题在于第二个映像的初始化。请看一看..@2vision2是真的,但这不是代码中唯一的问题。你们都是一样的。。第二幅图像不知道帧的大小。请看一下我的代码。你应该把你的答案集中在代码中实际更改的内容上。“这将有助于了解作品中的错误。”扎金斯特同意!而且是固定的\
IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);
#include <cv.h>
#include <highgui.h>

int main(int argc, char** argv)
    {
     // Cria uma janela.
    cvNamedWindow("imagem", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("hsv", CV_WINDOW_AUTOSIZE);  // added in orig code
    // Cria a conexão com a webcam.
    CvCapture *capture = cvCreateCameraCapture(0);
    // Variável que armazena o frame.
    IplImage *frame;
    IplImage* imghsv;
//    IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);
    while(1)
        {
        // Variável  recebe o frame.
        frame = cvQueryFrame(capture);
        imghsv = cvCreateImage(cvGetSize(frame),8,3);  /// changed from orig code.
        if(!frame) break;
        cvCvtColor(frame, imghsv, CV_BGR2HSV);
        // Exibe o frame na janela.
        cvShowImage("imagem", frame);
        cvShowImage("hsv", imghsv);
        // Encerra o loop com uma tecla.
        if( cvWaitKey(100) == 27 ) break;
    }
    // Libera a memória utiliazada.
    cvReleaseImage(&frame);
    cvReleaseImage(&imghsv);
    cvReleaseCapture(&capture);
    // Fecha a janela.
    cvDestroyWindow("imagem");
    cvDestroyWindow("hsv");
}