如何在opencv中将二维数组转换为灰度图像? 我在我的C++图像处理项目中使用OpenCV。
我有一个二维数组I[800][600],里面填充了0到255之间的值,我想把这个数组放在一个灰度级的“IplImage”中,这样我就可以查看它并使用openCV函数处理它 任何帮助都将不胜感激 提前谢谢如何在opencv中将二维数组转换为灰度图像? 我在我的C++图像处理项目中使用OpenCV。,c++,opencv,type-2-dimension,C++,Opencv,Type 2 Dimension,我有一个二维数组I[800][600],里面填充了0到255之间的值,我想把这个数组放在一个灰度级的“IplImage”中,这样我就可以查看它并使用openCV函数处理它 任何帮助都将不胜感激 提前谢谢 CvSize image_size; image_size.height = 800; image_size.width = 600; int channels = 1; IplImage *image = cvCreateImageHeader(image_size, IPL_DEPTH_8U
CvSize image_size;
image_size.height = 800;
image_size.width = 600;
int channels = 1;
IplImage *image = cvCreateImageHeader(image_size, IPL_DEPTH_8U, channels);
cvSetData(image, I, image->widthStep)
这是未经测试的,但可能需要修复的最重要的事情是cvSetData()
的第二个参数。这需要是一个指向无符号字符数据的指针,如果您只是使用一个不属于Mat
的2D数组,那么您必须做一些不同的事情(可能是循环?尽管您应该尽可能避免openCV中的循环)
参见一个高度相关的问题
在OpenCV C++接口中很容易,你只需要把一个矩阵放入其中,看看下面的行< /p>cv::Mat img=cv::Mat(800600,cv_8UC1,I)//I[800][600]
现在,您可以随心所欲了,Opencv将img视为8位灰度图像。您可以查询[this question][1],其中三个答案都是正确的。[1] :请注意答案,您应按照说明拨打
cvCreateImageHeader(cvSize(800600),IPL_DEPTH_8U,1)
后接cvSetData()
@CookSchelling我相信这个问题有一个更清晰/准确的答案,即标记为可能重复的答案。@karlphillip是的,你是对的。谢谢,但是图像扭曲了。我的数组是双重的,这会有区别吗?这个问题是另一个问题的重复。