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 cameran");
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()所期望的
从报价
相关文章:
- 开放 CV 中的动态内存分配,用于视频处理
- Opencv cpp 使用多线程处理同一视频的不同部分
- 完整Windows桌面的实时视频处理
- 用于视频处理的图像缓冲区
- 如何使用opencv计算视频的fps(带处理)
- OpenCV IOS Swift 2:如何实现 CvVideoCameraDelegate 协议处理视频帧
- 处理视频的指南
- 访问视频的每一帧并对其进行处理
- OpenCL视频处理
- OpenCV 视频处理在 iOS 中更换相机
- C/C++OpenCV视频处理
- OpenCV - 如何在局域网中的单独主机中处理视频的每一帧
- OpenCV视频处理帧速率下降
- 我可以将处理后的视频输出从 PC 上的 OpenCV 流式传输到安卓平板电脑吗?
- 后处理窗口视频输出
- 在Android上使用带有FFMPEG和OpenCV的NDK进行视频处理非常慢
- DirectShow和openCV.读取视频文件并进行处理
- 如何使用OpenCV或其他图像处理库从RGB数据写入YUV420视频帧
- C++视频逐帧处理
- 使用Qt和OpenCV读取和处理视频文件的有效方式