我使用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