OpenCV实现彩色图像轮廓 换背景颜色

转摘请注明:https://i.cnblogs.com/EditPosts.aspx?opt=1

有时候我们需要不一样颜色的证件照,下面就用OpenCV来实现证件照的蓝底、红底等换颜色;

代码如下:

 1 #include <opencv2/opencv.hpp>
 2 using namespace cv;
 3 int main()
 4 {
 5     Mat g_srcImage = imread("11.jpg");
 6     imshow("g_srcImage", g_srcImage);
 7     waitKey(0);
 8 
 9     vector<Mat> g_vChannels;
10     split(g_srcImage, g_vChannels);
11 
12     Mat imageBlueChannel = g_vChannels.at(0);
13     Mat imageGreenChannel = g_vChannels.at(1);
14     Mat imageRedChannel = g_vChannels.at(2);
15 
16 
17     Mat img_B = (2 * imageBlueChannel - imageGreenChannel - imageRedChannel);
18     imshow("img_B", img_B);
19     waitKey(0);
20 
21     threshold(img_B, img_B, 0, 255, CV_THRESH_OTSU);
22     imshow("img_B_g", img_B);
23     waitKey(0);
24 
25     //对每个轮廓进行分析
26     vector <Mat> contours;
27     vector <Vec4i> hierarchy;
28     double min_area = 50;//小于50的认为不是数字
29 
30     findContours(img_B, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
31 
32     // fill external contours
33     if (!contours.empty() && !hierarchy.empty())
34     {
35         for (int idx = 0; idx < contours.size(); idx++)
36         {
37             //Mat temp_img(Size(img_B.size()), CV_8U, Scalar(0));
38             drawContours(img_B, contours, idx, Scalar(255), CV_FILLED, 8);//填充 形成区域
39 
40             drawContours(g_srcImage, contours, idx, Scalar(255,255,255), CV_FILLED, 8);//填充 形成区域
41 
42             
43         }
44     }
45     imshow("g_srcImage11", g_srcImage);
46     waitKey(0);
47     imwrite("g_srcImage.bmp", g_srcImage);
48 
49 }

效果图:

 

转载于:https://www.cnblogs.com/ggYYa/p/6605832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值