我正在编写一个简单的算法来将 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");
}
没有行“IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);” .exe 有效,但算法只显示我的图像。
我在 Windows XP SP3 中使用 Dev C++ 4.9.9.2 和 OpenCV 2.1。 对不起英语。 谢谢
将 IplImage *frame;
替换为 IplImage *frame=cvQueryFrame(capture);
即可解决问题。
最佳答案
IplImage *frame;
IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);
您的 frame
图像尚未分配,您不应该在实际抓取帧之前创建 hsv 图像。
另请注意:
cvReleaseImage(&frame);
您不应该发布从 cvQueryFrame()
抓取的图像,OpenCV 会处理它。
来自 OpenCV 文档:
The function cvQueryFrame grabs a frame from a camera or video file, decompresses it and returns it. This function is just a combination of GrabFrame and RetrieveFrame , but in one call. The returned image should not be released or modified by the user. In the event of an error, the return value may be NULL.
CvCapture *capture = cvCreateCameraCapture(0);
您还应该检查 cvCreateCameraCapture
的返回值,它可能是 NULL
。
IplImage* imghsv = cvCreateImage(cvGetSize(frame),8,3);
您应该使用 IPL_DEPTH_8U
而不是 8
。
关于c - 开发 C++ 与 OpenCV 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16567341/