簡體   English   中英

C / C ++ OpenCV視頻處理

[英]C/C++ OpenCV video processing

今天是個好日子! 所以目前我正在開發一個帶視頻處理的項目,所以我決定嘗試一下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;

}

所以,這個非常好用,可以很好地將圖像存儲到硬盤中。 但問題始於下一個使用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。 如果是,是否有解決我之前描述的問題的方法。


另外,作為陳述這里 ,圖像最初是BGR格式,所以轉換需要。 但是做BGR2XYZ轉換似乎會反轉顏色,而RGB2XYZ保留它們。 例子:

圖片

或者是否有必要使用C ++ OpenCV?

不,沒有任何必要。 您可以使用任何您喜歡的界面,並且您認為自己很擅長(OpenCV提供C,C ++,Python界面)。

關於imwrite()imread()

對於彩色圖像,訂單通道通常是藍色,綠色,紅色,這就是imshow(),imread()和imwrite()所期望的

引自那里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM