【问题标题】:how to convert from a two dimensional array to a graylevel image in opencv?如何在opencv中从二维数组转换为灰度图像?
【发布时间】:2012-06-21 00:37:04
【问题描述】:

我在我的 c++ 图像处理项目中使用 openCV。

我有这个二维数组 I[800][600] 填充了 0 到 255 之间的值,我想把这个数组放在灰度级“IplImage”中,这样​​我就可以查看它并使用 openCV 函数对其进行处理。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

标签: c++ opencv type-2-dimension


【解决方案1】:

Opencv C++ 界面很简单,你只需要初始化一个矩阵,见下面一行

cv::Mat img = cv::Mat(800, 600, CV_8UC1, I) // I[800][600]

现在你可以为所欲为,Opencv 将 img 视为 8 位灰度图像。

【讨论】:

    【解决方案2】:
    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 的二维数组,那么您将不得不做一些不同的事情,(可能是一个循环?虽然你应该尽可能避免openCV中的循环)。

    有关高度相关的问题,请参阅 this post

    【讨论】:

    • 谢谢,但是图像失真了我的数组是双倍的,这有什么不同
    • 这个问题与另一个问题重复。
    猜你喜欢
    • 2020-02-20
    • 2013-06-21
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多