Opencv圖像處理之輪廓外背景顏色改變
本文實(shí)例為大家分享了Opencv輪廓外背景顏色改變的具體代碼,供大家參考,具體內(nèi)容如下
自行學(xué)習(xí)弄得簡(jiǎn)單代碼,使用了圖像中的輪廓發(fā)現(xiàn)以及提取,再繪制出來(lái),改變輪廓外的像素
首先,頭文件,寫的比較多,沒用的可以自己去除
#include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include"opencv2/imgproc/imgproc.hpp" #include <iostream> #include <fstream> #include <opencv2/opencv.hpp> //命名空間 using namespace cv; using namespace std;
//圖片數(shù)據(jù)名字,原圖,灰度圖,二值圖,直方圖 Mat src,src_gray,dst,src_equ; //聲明一個(gè)函數(shù),建立滑動(dòng)條 static void on_trackbar(int, void*);
主函數(shù)
int main(int argc, char** argv)
{
//圖片讀入
src = imread("D:\\PersonWork\\OpenCV\\program\\picture data\\0400.bmp");
//判斷是否存在
if (!src.data)
{
cout << "Image no find,error!" << endl;
}
//灰度轉(zhuǎn)換
cvtColor(src,src_gray, CV_BGR2GRAY);
//原圖窗口,顯示
namedWindow("原圖", 0);
imshow("原圖", src);
//二值圖窗口
namedWindow("二值圖", 0);
// 滑動(dòng)條
int nThreshold = 120;
createTrackbar("graybar", "二值圖", &nThreshold, 255,on_trackbar);
on_trackbar(nThreshold, 0);
waitKey(0);
destroyWindow("原圖");
destroyWindow("二值圖");
destroyWindow("result");
return 0;
}
回調(diào)函數(shù)
static void on_trackbar(int pos, void*)
{
//二值化
threshold(src_gray, dst, pos, 255, CV_THRESH_BINARY);
imshow("二值圖", dst);
//直方均勻化
equalizeHist(dst, src_equ);
//識(shí)別輪廓
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(src_equ, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
//輪廓數(shù)量,可沒有
//int len=contours.size();
//cout<<len<<endl;
//將圖拷貝,進(jìn)行遍歷圖片每個(gè)像素
Mat secImg = src_gray.clone();
const int np =secImg.rows * secImg.channels();
const int nr = secImg.rows;
for(int j=0;j<nr;j++){
uchar *sdata = secImg.ptr<uchar>(j);
for(int i=0;i<np;i++){
//判斷是否在輪廓上或者外面,如果在便將像素變?yōu)?55,即白色,因?yàn)檫@里需要的是最外輪廓,所以為contours[0],如果還需要?jiǎng)e的,contours[i],i 可以取其他值
if (pointPolygonTest(contours[0],Point(i,j),false) != 1)
sdata[i]=255;
}
}
}
//result窗口以及顯示結(jié)果
namedWindow("result",0);
imshow("result",secImg);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Opencv圖像處理:如何判斷圖片里某個(gè)顏色值占的比例
- Python+OpenCV圖像處理——圖像二值化的實(shí)現(xiàn)
- Opencv圖像處理之詳解掩膜mask
- Python+OpenCV圖像處理——實(shí)現(xiàn)直線檢測(cè)
- 詳解python opencv、scikit-image和PIL圖像處理庫(kù)比較
- OpenCV圖像處理之常見的圖像灰度變換
- Python+OpenCV數(shù)字圖像處理之ROI區(qū)域的提取
- Python+OpenCV圖像處理—— 色彩空間轉(zhuǎn)換
- Python+OpenCV圖像處理——實(shí)現(xiàn)輪廓發(fā)現(xiàn)
- OpenCV+Qt實(shí)現(xiàn)圖像處理操作
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)計(jì)算樹的深度的方法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)計(jì)算樹的深度的方法,針對(duì)數(shù)據(jù)結(jié)構(gòu)中樹進(jìn)行操作的方法,在算法設(shè)計(jì)中比較常見,需要的朋友可以參考下2014-09-09
C++計(jì)算任意權(quán)值的單源最短路徑(Bellman-Ford)
這篇文章主要為大家詳細(xì)介紹了C++計(jì)算任意權(quán)值的單源最短路徑,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C語(yǔ)言運(yùn)用函數(shù)的遞歸實(shí)現(xiàn)漢諾塔
遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無(wú)論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個(gè)函數(shù)(然后可能又調(diào)用第三個(gè)函數(shù)等),最后又調(diào)用第一個(gè)函數(shù)。因?yàn)楹瘮?shù)不可以一直不停地調(diào)用自己,所以遞歸函數(shù)一定具備結(jié)束條件2022-07-07
C 語(yǔ)言基礎(chǔ)教程(我的C之旅開始了)[四]
C 語(yǔ)言基礎(chǔ)教程(我的C之旅開始了)[四]...2007-02-02

