學習計算機視覺最重要的能力應該就是編程了。
圖像初始化操作
#include#include usingnamespacestd; usingnamespacecv; intmain(intargc,char** argv) { //這些方式都是自己擁有獨立的內(nèi)存空間 Matimg1(2,2, CV_8UC3, Scalar(0,0,255)); cout<< img1 < 圖像二值化操作
兩種方法,全局固定閾值二值化和局部自適應閾值二值化全局固定閾值很容易理解,就是對整幅圖像都是用一個統(tǒng)一的閾值來進行二值化;局部自適應閾值則是根據(jù)像素的鄰域塊的像素值分布來確定該像素位置上的二值化閾值。
#include#include usingnamespacestd; usingnamespacecv; intmain(intargc,char** argv) { Mat image = imread("lol1.jpg", CV_LOAD_IMAGE_GRAYSCALE);//注意了,必須是載入灰度圖 if(image.empty()) { cout<"read image failure"?< 腐蝕操作
#include#include usingnamespacecv; usingnamespacestd; intmain() { Mat SrcPic = imread("lena.jpg"); imshow("Src Pic", SrcPic); Mat element = getStructuringElement(MORPH_RECT, Size(15,15));//getStructuringElement函數(shù)返回的是指定形狀和尺寸的結(jié)構(gòu)元素 Mat DstPic; erode(SrcPic, DstPic, element);//腐蝕操作 imshow("腐蝕效果圖", DstPic); waitKey(); return0; }
均值濾波實現(xiàn)圖像模糊
#include#include usingnamespacecv; usingnamespacestd; intmain() { Mat SrcPic = imread("lena.jpg"); imshow("Src Pic", SrcPic); Mat DstPic; blur(SrcPic, DstPic, Size(7,7)); imshow("均值模糊效果圖", DstPic); waitKey(); return0; } 思路:將原始圖像轉(zhuǎn)化為灰度圖,用blur函數(shù)進行圖像模糊以降噪,然后用canny函數(shù)進行邊緣檢測。
#include#include usingnamespacecv; usingnamespacestd; intmain() { Mat SrcPic = imread("lena.jpg"); imshow("Src Pic", SrcPic); Mat DstPic, edge, grayImage; //創(chuàng)建與src同類型和同大小的矩陣 DstPic.create(SrcPic.size(), SrcPic.type()); //將原始圖轉(zhuǎn)化為灰度圖 cvtColor(SrcPic, grayImage, COLOR_BGR2GRAY); //先使用3*3內(nèi)核來降噪 blur(grayImage, edge, Size(3,3)); //運行canny算子 Canny(edge, edge,3,9,3); imshow("邊緣提取效果", edge); waitKey(); return0; }
轉(zhuǎn)為灰度圖
#include#include usingnamespacestd; usingnamespacecv; intmain() { Mat img = imread("lol1.jpg"); Mat dstImg; cvtColor(img, dstImg,COLOR_BGR2GRAY);//從宏名字就可以知道,是彩色圖轉(zhuǎn)換到灰度圖 imshow("灰度圖", dstImg); waitKey(0); } 訪問圖片中像素
#include#include usingnamespacestd; usingnamespacecv; //訪問每個像素,我喜歡使用指針的方式 intmain() { Mat img = imread("lol1.jpg"); for(inti =0; i < img.rows; i++) ? ?{ ? ? ? ?uchar* data = img.ptr (i); //獲取第i行地址 for(intj =0; j < img.cols; j++) ? ? ? ?{ ? ? ? ? ? ??printf("%d ",data[j]); ? ? ? ?} ? ?} ? ?waitKey(0); } 直方圖均衡化
#include#include usingnamespacestd; usingnamespacecv; //直方圖均衡化 intmain() { Mat img = imread("lol3.jpg"); imshow("原始圖", img); Mat dst; cvtColor(img, img, CV_RGB2GRAY); imshow("灰度圖", img); equalizeHist(img, dst); imshow("直方圖均衡化", dst); waitKey(0); } 顯然均衡化后的圖片對比度變高了,變得更加明亮!
常用的數(shù)據(jù)結(jié)構(gòu)
#include#include usingnamespacestd; usingnamespacecv; //常見數(shù)據(jù)結(jié)構(gòu)使用方法總結(jié) intmain() { //Mat的用法 Matm1(2,2, CV_8UC3, Scalar(0,0,255));//其中的宏的解釋:CV_[位數(shù)][帶符號與否][類型前綴]C[通道數(shù)] cout << m1 << endl; ? ?//或者,利用IplImage指針來初始化,將IplImage*轉(zhuǎn)化為Mat ? ?IplImage* image = cvLoadImage("lena.jpg"); ? ?Mat mat = cvarrToMat(image); ? ?//Mat轉(zhuǎn)IplImage: ? ?IplImage img = IplImage(mat); ? ?//或者 ? ?Mat m2; ? ?m2.create(4,?5, CV_8UC(2)); ? ?//點的表示:Point ? ?Point p; ? ?p.x =?1;?//x坐標 ? ?p.y =?1;?//y坐標 ? ?//或者 ? ?Point?p2(1,?1); ? ?//顏色的表示:Scalar(b,g,r);注意不是rgb,注意對應關系 ? ?Scalar(1,?1,?1); ? ?//尺寸的表示:Size ? ?Size(5,?5);// 寬度和高度都是5 ? ?//矩形的表示:Rect,成員變量有x,y,width,height ? ?Rect?r1(0,?0,?100,?60); ? ?Rect?r2(10,?10,?100,?60); ? ?Rect r3 = r1 | r2;?//兩個矩形求交集 ? ?Rect r4 = r1 & r2;?//兩個矩形求并集 ? ?waitKey(0); } 結(jié)束語
審核編輯:黃飛
-
邊緣檢測
+關注
關注
0文章
92瀏覽量
18249 -
數(shù)據(jù)結(jié)構(gòu)
關注
3文章
573瀏覽量
40232 -
OpenCV
+關注
關注
31文章
635瀏覽量
41559
原文標題:學習Opencv不得不掌握的操作
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論