gpt4 book ai didi

c++ - C/C++ OpenCV视频处理

转载 作者:太空狗 更新时间:2023-10-29 21:47:48 30 4
gpt4 key购买 nike

大家好!所以目前我正在做一个视频处理的项目,所以我决定尝试一下 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。如果是,是否有解决我之前描述的问题的方法。


也如前所述here ,图像最初是 BGR 格式,因此需要转换。但是进行 BGR2XYZ 转换似乎会反转颜色,而 RGB2XYZ 会保留它们。示例:

images

最佳答案

Or is it necessary to use C++ OpenCV?

不,没有任何必要。您可以使用您喜欢的任何接口(interface),并且您认为自己擅长(OpenCV 提供 C、C++、Python 接口(interface))。

关于 imwrite()imread() 的问题:

For color images the order channel is normally Blue, Green, Red , this is what imshow() , imread() and imwrite() expect

引自there

关于c++ - C/C++ OpenCV视频处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12445955/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com