2012-03-30 259 views
0

我正在使用现有的代码库,它在进行处理之前可以从网络摄像头创建CVD images。我的目标是在处理其余部分之前对增强现实执行此图像上的标记检测,并且我计划使用ArUco来执行此操作。问题是ArUco需要一个OpenCV图像来检测标记。将CVD图像转换为彩色OpenCV图像

我想通过手动访问CVD图像的每个像素并将RGB值粘贴到新的OpenCV图像中,从CVD图像手动创建此OpenCV图像。我对C++的工作不太熟悉,但肯定有更好的方法来做到这一点?

回答

2

我使用类似这样的东西。 myImage的类型是一个(自定义)图像类型,它将图像的每个像素的3个字节存储在连续的内存字节中,myImage.data()是指向该内存开始的指针。如果您的CVD图像(我不熟悉)以类似的方式布置,您也可以做同样的事情。

cv::Mat image(rows, cols, CV_8UC3, myImage.data()); 
+1

是的,如果可能的话,您绝对要包装图像而不做副本。 – aardvarkk 2012-03-30 16:48:15

+0

这听起来像我想要做的。根据CVD图像文档,我可以使用[]运算符取消每个像素的值,但我似乎无法找到如何获取图像的起始块内存。从上面的代码我猜行=图像的宽度,cols =高度和CV_8UC3是图像格式?是否有上述功能的文档,所以我可以尝试找出适用的图像格式? – Jkh2 2012-03-30 17:09:08

+1

查看opencv.itseez.com的文档,并找到第一个元素的地址与&image [0,0]。 CV_8UC3代表无符号,8位(uchar是标准图像类型),3通道(RGB)。 – Sam 2012-03-30 18:51:15

相关问题