在我的程序中我有从摄像机获取图像的功能,应该将所有数据打包在OpenCV Mat
结构中。从相机我得到宽度,高度和unsigned char*
到图像缓冲区。如果我有全局Mat变量,我的问题是如何从这些数据创建Mat。 Mat结构的类型我采用了CV_8UC1。
Mat image_;
function takePhoto() {
unsigned int width = getWidthOfPhoto();
unsinged int height = getHeightOfPhoto();
unsinged char* dataBuffer = getBufferOfPhoto();
Mat image(Size(width, height), CV_8UC1, dataBuffer, Mat::AUTO_STEP);
printf("width: %u\n", image.size().width);
printf("height: %u\n", image.size().height);
image_.create(Size(image.size().width, image.size().height), CV_8UC1);
image_ = image.clone();
printf("width: %u\n", image_.size().width);
printf("height: %u\n", image_.size().height);
}
当我测试我的计划时,我得到了width
的{{1}}和height
,但我的全局匹配image
和width
height
是image_
。我如何正确地将数据放入我的全局0
变量?
谢谢。
答案 0 :(得分:15)
不幸的是,clone()
和copyTo()
都没有成功将宽度/高度值复制到另一个Mat。至少在OpenCV 2.3上!真的很遗憾。
但是,您可以通过使函数返回Mat
来解决此问题并简化代码。这样您就不需要拥有全局变量:
Mat takePhoto()
{
unsigned int width = getWidthOfPhoto();
unsigned int height = getHeightOfPhoto();
unsigned char* dataBuffer = getBufferOfPhoto();
Mat image(Size(width, height), CV_8UC1, dataBuffer, Mat::AUTO_STEP);
return Mat;
}
int main()
{
Mat any_img = takePhoto();
printf("width: %u\n", any_img.size().width);
printf("height: %u\n", any_img.size().height);
}