大家好!所以目前我正在開發一個視頻處理項目,所以我決定嘗試OpenCV。由於我是新手,我決定找幾個樣本代碼並對它們進行測試。第一個,是C OpenCV的,看起來像這樣:C/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;
}
所以,這一個很完善並存儲圖像的硬盤驅動器很好。但問題下一個樣品,它採用C++ OpenCV的開始:
#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;
}
所以,是的,一般來說,在顯示視頻(圖像幀)方面幾乎沒有任何變化,但是當涉及到使用im * *功能,出現一些問題。
使用cvSaveImage()工作地非常好,但現在我嘗試使用imwrite(),未處理的異常的訪問衝突讀取位置「的問候就出現了。當我嘗試加載圖像時,imread()也是如此。
所以,我想問的東西,是有可能使用的大部分功能以C OpenCV的?還是有必要使用C++ OpenCV。如果是的話,是否有解決我前面描述的問題。
另外如所陳述here,圖像最初是在BGR格式,所以轉換需要的。但是做BGR2XYZ轉換似乎反轉顏色,而RGB2XYZ保留它們。例子:
的可能的複製引用[OpenCV的圖像處理 - C++對C VS的Python(http://stackoverflow.com/q/2278228/11343) – CharlesB
懇求向我們展示導致異常的代碼。 –
@Seckin Savasci,當我取消註釋'//imwrite("test1.jpg「,frame);'line,它會引起異常。 – Monceber