我使用openCV C++ API,并试图将相机缓冲区(YUV_NV12)转换为RGB格式。然而,我的图像尺寸发生了变化(宽度从720缩小到480),颜色错了(有点紫色/绿色ish)。OpenCV cvtColor()更改我的图像尺寸和错误的颜色
unsigned char* myYUVBufferPointer = (something passed as argument)
int myYUVBufferHeight = 1280
int myYUVBufferWidth = 720
cv::Mat yuvMat(myYUVBufferHeight, myYUVBufferWidth, CV_8U, myYUVBufferPointer);
cv::Mat rgbMat;
cv::cvtColor(yuvMat, rgbMat, CV_YUV2RGB_NV12);
cv::imwrite("path/to/my/image.jpg",rgbMat);
任何想法? *(我更感兴趣的莫过于颜色改变大小,因为我最终将其转换为CV_YUV2GRAY_NV12和多数民众的工作,但规模并不)。*
非常感谢蜜蜂!当我尝试CV_8UC3时,我在0x11d7ba8处调用cvtColor()__generic_memcpy()时会出现段错误。所以你说我应该遍历我的缓冲区的所有像素,并构建一个新的3单通道?为什么选择BGR而不是RGB? – nox
仅供参考,当我调用cvtColor()时(或者当我调用imwrite()时发生崩溃) – nox
在OpenCV中,CV_8U3C图像中的默认颜色顺序是Blue-Green-Red。例如,'cv :: imwrite()'预计彩色图像的BGR排序。段错误可能因各种原因而发生,所以很难弄清楚为什么会出现段错误。有时在发布程序中使用调试库或反之亦然是罪魁祸首。您最好的选择是使用CV_8U单独构建每个通道,将每个通道推入std :: vector,并使用cv :: merge将矢量合并到单个CV_8UC3图像中。 –
Bee