将cv::Mat BGR格式转YUV格式时调用cvtColor函数导致程序崩溃原因:
原因在于cv::cvtColor(bgrImg, yuvImg, COLOR_BGR2YUV_I420);
函数中的bgrImg的尺寸必须是偶数的,若宽或高为奇数,则调用时会崩溃。
解决方法:
在调用cvtColor前可以先将rgbImg的尺寸裁剪为最近的偶数:
cv::Mat bgrImg= cv::imread(imgPath); // 读入是BGR模式
int evenRows = bgrImg.rows / 2 * 2;
int evenCols = bgrImg.cols / 2 * 2;
// 裁剪
cv::Rect m_select = Rect(0, 0, evenCols, evenRows);
Mat cropImg = bgrImg(m_select);
Mat yuvImg;
cv::cvtColor(cropImg , yuvImg, COLOR_BGR2YUV_I420);