C++ openCV垫初始化

C++ openCV mat initialization

我是 OpenCV 的新手,我正在尝试从两种不同类型的数据中初始化两个 cv::Mat 矩阵。一个是 uint16_t 灰度值的简单单通道数组,第二个应该保存 uint8_t 值数组中的 RGB 值,其中包含 RGB 565(每个像素占用 2 uint8_t,所以它基本上是 uint8_t 数组=12=]).我想要一个单通道矩阵和一个三通道矩阵(有时可能会转换为一个通道...但我还没有完全做到这一点。

function(uint16_t *oneChanell, int oneChanellWidth, int oneChanellHeight, uint8_t *rgb, int rgbWidth, int rgbHeight){
...
    cv::Mat M1 = cv::Mat(oneChanellHeight, oneChanellWidth, CV_16UC1, oneChanell);
    cv::Mat M2 = cv::Mat(rgbHeight, rgbWidth, CV_16UC3, rgb);
...
}

现在,我知道第二次初始化是错误的。所以这是我的问题的一部分,如何最好地将 rgb565 值数组转换为 cv::Mat。 然而,以我的理解,第一次初始化应该有效。当使用 cv::imwrite() 进行测试时,第一个只产生正确尺寸的空白白色图片,第二个产生相同(正确)图片的三个部分重叠的轮廓,但不是 RGB。如有任何建议,我们将不胜感激。

使用cv::cvtColor将mat M2从RGB565格式转换为RGB格式。

...

cv::Mat M2 = cv::Mat(rgbHeight, rgbWidth, CV_16UC1, rgb);
// M2.depth()    = 2 # CV_16U
// M2.channels() = 1 # single channel with each element having 16 bit



//convert mat format from bgr565 to rgb
cv::Mat M2_rgb;
cv::cvtColor(M2, M2_rgb, COLOR_BGR5652RGB);

...