OpenCV中使用面具等非矩形图像

来源:互联网 发布:淘宝浏览单app有哪些 编辑:程序博客网 时间:2024/04/29 05:55

    在《OpenCV实例精解》一书中,有一个识别人脸然后加上面具的例子,刚开始看的时候就有一个疑惑,面具的图像是矩形的,糊到脸上要怎么使用掩膜呢。后来发现例子里面用的方法很巧妙,这里重新把面具处理部分的代码总结一下:


    Mat faceMaskSmall = imread("facemask.jpg");        if ( !faceMaskSmall.data )    {        cerr << "Error loading mask image. Exiting!" << endl;    }    imshow("faceMaskSmall", faceMaskSmall);    Mat grayMaskSmall, grayMaskSmallThresh, grayMaskSmallThreshInv;    Mat maskedFace, maskedFrame;    cvtColor(faceMaskSmall, grayMaskSmall, CV_BGR2GRAY);                //面具图像中大于200的像素设为0,也就是面具部分为非零,周围为零    threshold(grayMaskSmall, grayMaskSmallThresh, 250, 255, CV_THRESH_BINARY_INV);    imshow("grayMaskSmallThresh", grayMaskSmallThresh);                //把src里面每一个元素都倒过来,放到dst里面,0变255,255变0    bitwise_not(grayMaskSmallThresh, grayMaskSmallThreshInv);    //imshow("grayMaskSmallThreshInv", grayMaskSmallThreshInv);    //grayMaskSmallTreshInv作为掩膜,是控制前面两个参数的与的结果    //只有掩膜里面的值为非零时,这两个参数才做与运算    //这里的运算结果就是只留下了中间面具部分非零,周围部分变为零    bitwise_and(faceMaskSmall, faceMaskSmall, maskedFace, grayMaskSmallThresh);    imshow("maskedFace", maskedFace);    //这里的结果是识别出来的脸变为零,只有周围部分非零     bitwise_and(frameROI, frameROI, maskedFrame, grayMaskSmallThreshInv);    //把面具和背景加在一起,结果放在摄像机图像的人脸部分中  





0 0
原创粉丝点击