Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;_C++_Opencv - Fatal编程技术网

C++ 在C++;

C++ 在C++;,c++,opencv,C++,Opencv,我正在使用OpenCV将使用IDS uEye摄像头捕获的图像数据转换为有用的格式,使用以下代码: IplImage* tmpImg = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3); tmpImg->imageData = pFrameBuffer[k]; frame = cv::cvarrToMat(tmpImg); 这非常好用——我可以使用imwrite(文件名,帧)进一步下游,将处理后的图像作为合理的格式写出。理想情况下,我希

我正在使用OpenCV将使用IDS uEye摄像头捕获的图像数据转换为有用的格式,使用以下代码:

IplImage* tmpImg = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);
tmpImg->imageData = pFrameBuffer[k];
frame = cv::cvarrToMat(tmpImg);
这非常好用——我可以使用
imwrite(文件名,帧)进一步下游,将处理后的图像作为合理的格式写出。理想情况下,我希望能够将RGB通道保存为单独的“灰度”图像文件,但我不了解有关单通道操作的OpenCV文档。有人能提出一个实现这一点的方法吗?最好它在计算上不太昂贵(逐像素循环图像不是一个选项-我正在处理高达1280x1064的60-230fps视频,所有处理都必须在捕获点完成)


运行最新的Debian测试,如果这有什么不同的话(我认为不应该)。

一旦你有了
cv::Mat
对象,它就非常简单:

std::vector<cv::Mat> grayPlanes;
cv::split(frame, grayPlanes);

cv::imwrite("blue.png", grayPlanes[0]);
cv::imwrite("green.png", grayPlanes[1]);
cv::imwrite("red.png", grayPlanes[2]);
std::矢量灰度平面;
cv::拆分(帧、灰色平面);
cv::imwrite(“blue.png”,灰度平面[0]);
cv::imwrite(“green.png”,灰度平面[1]);
cv::imwrite(“red.png”,灰度平面[2]);

split函数可以直接写入标准向量,您不必考虑内存管理和其他问题。

此外,停止使用IplImage。用垫代替,和C++函数!我不是一个喜欢OpenCV的人-你能给我一个例子,说明如何在没有IplImage的情况下达到同样的目的吗?比如
Mat frame(尺寸(宽度、高度)、CV_8UC3、pData)