天天看點

opencv彩色圖像與灰階圖像疊加

int cx = (displayedFrame.cols - faceWidth) / 2;
    if (preprocessedFace.data) {
        Mat srcBGR = Mat(preprocessedFace.size(), CV_8U);
	cvtColor(preprocessedFace, srcBGR, CV_GRAY2BGR);
 
        Rect dstRC = Rect(cx, BORDER, faceWidth, faceHeight);
        Mat dstROI = displayedFrame(dstRC);
        srcBGR.copyTo(dstROI);
    }
    rectangle(displayedFrame, Rect(cx-1, BORDER-1, faceWidth+2, faceHeight+2), CV_RGB(200,200,200), 1, CV_AA);
這段代碼是預處理人臉轉換為彩色
然後再在            
displayedFrame上面疊加一副和預處理人臉同樣尺寸的圖檔dstROI
将轉換為彩色的圖像srcBGR複制給dstROI
然後我一直不懂為什麼要将預處理人臉preprocessedFace轉換為彩色圖srcBGR,再進行疊加
為什麼不直接進行疊加
或者為什麼不将dstROI轉換為灰階圖進行疊加
後來查了一圈資料也沒有查到将灰階圖疊加到彩色圖檔上的方法
自己寫了個demo試驗了一下發現确實不行
自己思考估計疊加的圖檔是要和被疊加的圖檔同樣的格式才可以,是以才要将預處理人臉轉換為彩色圖像
另外圖檔疊加的代碼如下
       
int main()
{
	Mat img = imread("D://lena.bmp");
	Mat logo (100,100, CV_8UC3, Scalar(0,0,255)); 
	Mat imgROI = img(Rect(100, 0, 100, 100));
	logo.copyTo(imgROI);
	imshow("result", img);  
	waitKey(0);
	return 0;
}