我已经定义了一个数组char buf [],需要将其转换为Opencv Mat。有办法吗?
char buf[Max_size];
答案 0 :(得分:3)
没有任何内容可以调用:“将cv::Mat
数组转换为cv::Mat
”。 cv::Mat
是表示内存中图像的容器。它可能拥有数据,也可能不拥有。如果要创建char
来表示某个cv::Mat my_mat(rows,cols,CV_8UC1,&buf[0]); //in case of BGR image use CV_8UC3
数组中的位图数据的图像,可以使用以下代码。很有趣,你知道图像的行和列。
cv::Mat
请注意,在这种情况下,{{1}}不拥有数据的所有权。您已手动删除数据。但是,由于它是一个堆栈数组,因此您不需要任何操作。
答案 1 :(得分:1)
我认为Humams的答案是正确的,但是,这是一个完整的C ++示例,说明如何从无符号char数组中获取图像。
#include <opencv2/opencv.hpp>
unsigned char img_data[] = {
// first row, 4 colored pixels
0, 0, 0,
255, 0, 0,
0, 0, 0 ,
0, 255, 0,
// second row, 4 colored pixels
0, 0, 255,
0, 0, 0,
255, 0, 255,
0, 0, 0
};
// get a correct pointer to the data
unsigned char * img_data_ptr = (unsigned char*) &img_data;
cv::Mat img(2, 4, CV_8UC3, img_data_ptr);
cv::cvtColor(img, img, cv::COLOR_BGR2RGB);
cv::imwrite("/out/myimage.png", img);
该示例在https://github.com/FilipSivak/opencv-minimal上被Docker化