學習計算機視覺最重要的能力應該就是編程了。
圖像初始化操作
#include#include usingnamespacestd; usingnamespacecv; intmain(intargc,char** argv) { //這些方式都是自己擁有獨立的內存空間 Matimg1(2,2, CV_8UC3, Scalar(0,0,255)); cout<< img1 < 圖像二值化操作
兩種方法,全局固定閾值二值化和局部自適應閾值二值化全局固定閾值很容易理解,就是對整幅圖像都是用一個統一的閾值來進行二值化;局部自適應閾值則是根據像素的鄰域塊的像素值分布來確定該像素位置上的二值化閾值。
#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函數返回的是指定形狀和尺寸的結構元素 Mat DstPic; erode(SrcPic, DstPic, element);//腐蝕操作 imshow("腐蝕效果圖", DstPic); waitKey(); return0; }
均值濾波實現圖像模糊
#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; } 思路:將原始圖像轉化為灰度圖,用blur函數進行圖像模糊以降噪,然后用canny函數進行邊緣檢測。
#include#include usingnamespacecv; usingnamespacestd; intmain() { Mat SrcPic = imread("lena.jpg"); imshow("Src Pic", SrcPic); Mat DstPic, edge, grayImage; //創建與src同類型和同大小的矩陣 DstPic.create(SrcPic.size(), SrcPic.type()); //將原始圖轉化為灰度圖 cvtColor(SrcPic, grayImage, COLOR_BGR2GRAY); //先使用3*3內核來降噪 blur(grayImage, edge, Size(3,3)); //運行canny算子 Canny(edge, edge,3,9,3); imshow("邊緣提取效果", edge); waitKey(); return0; }
轉為灰度圖
#include#include usingnamespacestd; usingnamespacecv; intmain() { Mat img = imread("lol1.jpg"); Mat dstImg; cvtColor(img, dstImg,COLOR_BGR2GRAY);//從宏名字就可以知道,是彩色圖轉換到灰度圖 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); } 顯然均衡化后的圖片對比度變高了,變得更加明亮!
常用的數據結構
#include#include usingnamespacestd; usingnamespacecv; //常見數據結構使用方法總結 intmain() { //Mat的用法 Matm1(2,2, CV_8UC3, Scalar(0,0,255));//其中的宏的解釋:CV_[位數][帶符號與否][類型前綴]C[通道數] cout << m1 << endl; ? ?//或者,利用IplImage指針來初始化,將IplImage*轉化為Mat ? ?IplImage* image = cvLoadImage("lena.jpg"); ? ?Mat mat = cvarrToMat(image); ? ?//Mat轉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); } 結束語
審核編輯:黃飛
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
邊緣檢測
+關注
關注
0文章
92瀏覽量
18229 -
數據結構
+關注
關注
3文章
573瀏覽量
40187 -
OpenCV
+關注
關注
31文章
635瀏覽量
41451
原文標題:學習Opencv不得不掌握的操作
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Vitis HLS工具在Standalone模式下調用Xilinx Vision Library L1 API例程
在論壇上遇到在高層次綜合工具中調用視覺庫遇到的大多數問題都和 opencv 庫以及Xilinx Vision 庫的安裝路徑有關,如今 Vit
發表于 07-25 04:14
?1862次閱讀
Qt使用openCV庫
使用Qt加OpenCV進行數字圖像處理了還是很不錯的,參考網上一個帖子分享一下經驗:環境:Windows下的Qt4.7.0安裝qt-sdk-win-opensource-4.7下載OpenCV庫
發表于 11-22 16:12
labview無法調用opencv的dll庫怎么回事?
labview201332位的,opencv dll也配制成了32位的,電腦是64位的,然后生成了dll文件里導出了兩個函數,一個是普通的相加函數,labview可以正常調用運行;另一個讀取了一張
發表于 06-20 10:56
人臉識別歷程中的opencv庫是1.0還是emcv版本?
Q1.這個歷程中的opencv庫是否是1.0還是emcv版本啊?Q2.看到里面好多opencv庫中有的函數并沒有調用,而是重寫了一個(比如轉
發表于 10-28 14:31
LabVIEW+Python+openCV
現在網上一般關于LabVIEW做視覺常規會用到NI Vision工具包,以及openCV的動態鏈接庫,實現LabVIEW調用openCV的功能,但是NI Vision工具包除非破解,正
發表于 12-07 20:59
怎樣去生成能在Qt中應用的opencv庫呢
請問如何生成適用于arm版的opencv,能在Qt中應用。(想在Qt中開發opencv相關的功能,需要調用opencv庫,我用別的交叉工具鏈
發表于 12-30 06:58
ok5718怎么調用arm環境下的opencv2來進行交叉編譯cpp呢?
現成的交叉編譯后的opencv2庫以及依賴庫嗎,在哪里?或者說該怎么調用arm環境下的opencv2來進行交叉編譯cpp呢?[/td]
發表于 11-21 13:41
Android系統下OpenCV的人臉檢測模塊的設計
針對解決OpenCV人臉檢測模塊在Android平臺編譯和移植的問題,提出一種利用JNI技術(Java Native Interface)調用OpenCV以及采用Android NDK(Native Development Ki
發表于 11-07 17:40
?118次下載
如何使用Python來調用OpenCV庫
果您的電腦是win10的系統,那么請您按下win鍵,再按下空格鍵,輸入Python,進入Python的IDEA shell界面。這個時候您也可以直接進入CMD進行民命令行模式的編輯,因為第一次可我們并不會很多的代碼需要您去編輯。在后期您可以使用輕量級的IDEA,比如sublime test3 或者重量級的Pycharm IDEA進行編輯,它們都是現在世界上十分常用的Python編譯器,用它們進行編輯,會給你們一種視覺上的清新之感以及靈魂上的愉悅之感呢。
發表于 05-15 18:10
?3次下載
計算機視覺中如何調用OpenCV庫
學習計算機視覺最重要的能力應該就是編程了,為了幫助小伙伴盡快入門計算機視覺,小白準備了【走進OpenCV】系列,主要幫助小伙伴了解如何調用OpenCV庫,涉及到的知識點會做簡單講解。
在LabVIEW中調用OpenVINO? 模型
自帶機器視覺函數庫,并提供OpenCV接口庫,開發機器視覺與自動化應用程序速度快使用LabVIEW調用OpenVINO IR模型,可以快速完成深度學習項目開發與交付。
opencv-python和opencv一樣嗎
-Python是OpenCV的一個Python語言接口,它允許開發者使用Python語言來調用OpenCV庫的功能。 雖然OpenCV和
評論