九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
opencv 截取輪廓中的圖像

我們很容易用findContours()函數(shù)將圖像中的輪廓提取出來,但是并沒有將輪廓所包圍的圖像輸出的函數(shù),以下是幾個(gè)有類似功能的函數(shù):

cvimageroi():得到包圍ROI(感興趣區(qū)域)的矩形區(qū)域,可以直接把輪廓點(diǎn)集作為參數(shù)給進(jìn)去然后返回包圍這個(gè)輪廓的最佳矩形點(diǎn)集,然后再用Mat的成員函數(shù)Mat(Rec)把這個(gè)區(qū)域提取出來。遺憾的是這樣只能提取矩形區(qū)域,無法提取不規(guī)則區(qū)域。

boundingRect():這個(gè)同上一個(gè)是一樣的功能,也是得到矩形區(qū)域。

進(jìn)入正題

首先將原圖像灰度化,二值化,然后提取輪廓,進(jìn)行排除、去噪處理之后用drawContours()函數(shù)把輪廓填充為白色。具體做法是:

Mat hole(res.size(), CV_8U, Scalar(0)); //新建一個(gè)黑色的遮罩圖層

cv::drawContours(hole, contours1, -1, Scalar(255), CV_FILLED); //在遮罩圖層上,將輪廓里面的空間用白色像素填充

之后將原圖用copyTo()函數(shù)疊加到遮罩圖層上,就大功告成了。

  1. #include "opencv2/imgproc.hpp"  
  2. #include "opencv2/highgui.hpp"  
  3. #include <iostream>  
  4. using namespace cv;  
  5. using namespace std;  
  6. void main() {  
  7.     Mat original = imread("D:\\res.png");  
  8.     namedWindow("My original");  
  9.     imshow("My original", original);  
  10.     Mat gray = original;  
  11.     cv::cvtColor(gray, gray, CV_RGB2GRAY);//灰度化  
  12.   
  13.     int thresh_size = (100 / 4) * 2 + 1; //自適應(yīng)二值化閾值  
  14.     adaptiveThreshold(gray, gray, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY_INV, thresh_size, thresh_size / 3);  
  15.     morphologyEx(gray, gray, MORPH_OPEN, Mat());//形態(tài)學(xué)開運(yùn)算去噪點(diǎn)  
  16.   
  17.     vector<vector<Point> > contours;  
  18.     cv::findContours(gray, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); //找輪廓  
  19.     vector<vector<Point>> contours1;  
  20.     for (int i = 0; i < contours.size(); ++i)  
  21.     {  
  22.         if (contours[i].size() > 200)//將比較小的輪廓剔除掉  
  23.         {  
  24.             contours1.push_back(contours[i]);  
  25.         }  
  26.     }  
  27.     /*可以加入以下功能*/  
  28.     //vector<vector<Point>> contours2;  
  29.     //vector<Point> approx_poly;//存放頂點(diǎn)  
  30.     //for (int i = 0; i < contours1.size(); ++i)  
  31.     //{  
  32.         //double eps = contours1[i].size()*0.08;//精度  
  33.         //approxPolyDP(contours1[i], approx_poly, eps, true);//用另一條頂點(diǎn)較少的曲線來逼近一條曲線或者一個(gè)多邊形  
  34.         //if ((approx_poly.size() != 4) || (!isContourConvex(approx_poly)))//提取只有4個(gè)頂點(diǎn)的輪廓和凸多邊形  
  35.         //{  
  36.         //  continue;  
  37.         //}  
  38.         //else {  
  39.     //contours2.push_back(contours1[i]);  
  40.         //}  
  41.     //}  
  42.     Mat hole(gray.size(), CV_8U, Scalar(0)); //遮罩圖層  
  43.     cv::drawContours(hole, contours1, -1, Scalar(255), CV_FILLED); //在遮罩圖層上,用白色像素填充輪廓  
  44.         namedWindow("My hole");  
  45.         imshow("My hole", hole);  
  46.     Mat crop(original.rows, original.cols, CV_8UC3);  
  47.     original.copyTo(crop, hole);//將原圖像拷貝進(jìn)遮罩圖層  
  48.     namedWindow("My warpPerspective");  
  49.     imshow("My warpPerspective", crop);  
  50.     waitKey(0);  
  51. }  


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
OpenCV 輪廓矩
OpenCV探索之路(十一):輪廓查找和多邊形包圍輪廓
OpenCV C 案例實(shí)戰(zhàn)九《對象計(jì)數(shù)》
【OpenCV學(xué)習(xí)筆記】三十、輪廓特征屬性及應(yīng)用(七)
opencv二維碼識別解碼
RotatedRect 校正帶旋轉(zhuǎn)角度的矩形
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服