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 }
效果图: