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 }

效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM