在我的程序中,我有从摄像机获取图像的功能,应该将所有数据打包在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);
}
Run Code Online (Sandbox Code Playgroud)
当我测试的程序,我马上width和height的image,但width和height我的全球垫image_是0.我如何Mat正确地将数据放入我的全局变量中?
谢谢.
kar*_*lip 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);
}
Run Code Online (Sandbox Code Playgroud)