【问题标题】:Opencv 2.4.0: Load image through unsigned char arrayOpencv 2.4.0:通过无符号字符数组加载图像
【发布时间】:2013-10-17 18:45:38
【问题描述】:

认为我已经彻底搜索了论坛,除非我在搜索字符串中遗漏了某些关键字,所以如果我错过了一个帖子,请原谅我。我目前正在使用 OpenCV 2.4.0,我认为这只是一个简单的问题:

我正在尝试接收从另一个 API 获得的无符号字符数组(8 位,3 通道)并将其放入 OpenCV 矩阵中以查看它。然而,所显示的只是尺寸正确但灰色完全一致的图像。这与您指定要显示的不正确的 Mat 名称时看到的颜色相同。

咨询过: Convert a string of bytes to cv::mat(使用数组内的字符串)和 opencv create mat from camera data(我以为是 BINGO!,但似乎无法正确显示图像)。

我退后一步,只是尝试制作一个示例数组(以消除提供该数组的其他部分):

int main() {


bool isCamera = true;

unsigned char image_data[] = {255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255};
cv::Mat image_as_mat(Size(6,3),CV_8UC3,image_data);
namedWindow("DisplayVector2",CV_WINDOW_AUTOSIZE);
imshow("DisplayVector2",image_as_mat);
cout << image_as_mat << endl;

getchar();

}

所以我只是创建一个 6x3 矩阵,第一行是红色像素,第二行是绿色像素,第三行是蓝色。但是,这仍然会产生相同的空白灰色图像,但尺寸正确。

矩阵的输出是(注意分号,即它的格式正确):

[255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0; 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0; 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255]

我可能疯了,或者在这里遗漏了一些明显的东西。我是否需要初始化 Mat 中的某些内容以使其正确显示?一如既往地感谢大家的帮助!

【问题讨论】:

  • 我提示调试这个。制作 image_as_at 后,尝试将其拆分为两个 3 CV_8U Mat(使用 cv::split)并打印它们中的每一个。你会看到你的初始化是否正确。

标签: arrays opencv image-processing


【解决方案1】:

这里所有的巫术都归结为调用getchar() 而不是(必需的)waitKey()

让我解释一下,waitKey 在这里可能用词不当,但您实际上需要它,因为里面的代码包装了窗口的消息循环,它会触发实际的 blitting(除了等待按键)。

如果您不调用它,您的窗口将永远更新,并且只会保持灰色(这就是您在此处观察到的)

确实,您应该相信 cout 的结果,您的 Mat 构造正确,只是没有显示在 namedWindow 中

(顺便说一句,getchar() 等待来自 console 窗口的按键,而不是您的 img 窗口)

希望对您有所帮助,祝您继续改进 ;)

【讨论】:

  • 哦,我的...啊,真尴尬...是的,我想我只是在调试时习惯使用 getchar()。非常感谢!
  • 嘿,你并不孤单;)(谈到经验)
猜你喜欢
  • 2012-06-12
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多