开发C++;使用OpenCV崩溃
我正在编写一个简单的算法,将我的网络摄像头中的RGB图像转换为HSV,它编译得很好,但在执行.exe时崩溃开发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
#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");
}