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;
}
opencv彩色图像与灰度图像叠加
最新推荐文章于 2023-12-02 11:38:30 发布