所以有RGBRGBRGB的缓冲区... w * 3的大小如何用这样的数据填充OpenCV图像?
答案 0 :(得分:4)
最简单的方法是使用at templated method循环遍历缓冲区的元素。
unsigned char buffer[] = {1, 2, 3, ..., 18}; // RGBRGB...
cv::Mat image(2, 3);
for (int i = 0; i < 18; ++i) {
int row = i/9;
int col = (i/3)%3;
int rgb = i%3; // An index
image.at<unsigned char>(row,col+rgb) = buffer[i];
}
当然,您需要使用正确的类型初始化矩阵,并设置颜色格式,我在上面没有这样做。查看有关OpenCV矩阵对象here的更多信息。
答案 1 :(得分:2)
IplImage有一个变量imageData。它只是一个缓冲区。因此,如果数组具有与imageData缓冲区相同的格式,则可以简单地复制数组。如果格式不同,那么您可以复制,但是您需要正确填充IplImage的其他变量。