0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

計(jì)算機(jī)視覺(jué)中如何調(diào)用OpenCV庫(kù)

新機(jī)器視覺(jué) ? 來(lái)源:博客園 ? 作者:謝玉林 ? 2021-09-08 10:26 ? 次閱讀

學(xué)習(xí)計(jì)算機(jī)視覺(jué)最重要的能力應(yīng)該就是編程了,為了幫助小伙伴盡快入門(mén)計(jì)算機(jī)視覺(jué),小白準(zhǔn)備了【走進(jìn)OpenCV】系列,主要幫助小伙伴了解如何調(diào)用OpenCV庫(kù),涉及到的知識(shí)點(diǎn)會(huì)做簡(jiǎn)單講解。

圖像初始化操作

#include《opencv2opencv.hpp》 #include《opencv2highguihighgui.hpp》 using namespace std; using namespace cv; int main(int argc, char** argv) { //這些方式都是自己擁有獨(dú)立的內(nèi)存空間 Mat img1(2, 2, CV_8UC3, Scalar(0, 0, 255)); cout 《《 img1 《《 endl; int sz[3] = { 2,2,2 }; Mat img2(3, sz, CV_8UC1, Scalar(0, 0, 0)); //cout 《《 img2 《《 endl; Mat img5; img5.create(4, 4, CV_8UC3);

cout 《《 img5 《《 endl; Mat img6 = Mat::zeros(4, 4, CV_8UC3); cout 《《 img6 《《 endl; Mat img7 = img6.clone(); cout 《《 img7 《《 endl; Mat img8; img6.copyTo(img8); cout 《《 img8 《《 endl; //下面都是淺拷貝,指針指向同一個(gè)實(shí)例 Mat img9 = img8; Mat img10(img8); waitKey(0); return 0; }

圖像二值化操作

兩種方法,全局固定閾值二值化和局部自適應(yīng)閾值二值化全局固定閾值很容易理解,就是對(duì)整幅圖像都是用一個(gè)統(tǒng)一的閾值來(lái)進(jìn)行二值化;局部自適應(yīng)閾值則是根據(jù)像素的鄰域塊的像素值分布來(lái)確定該像素位置上的二值化閾值。

#include《opencv2opencv.hpp》 #include《opencv2highguihighgui.hpp》 using namespace std; using namespace cv; int main(int argc, char** argv) { Mat image = imread(“l(fā)ol1.jpg”, CV_LOAD_IMAGE_GRAYSCALE); //注意了,必須是載入灰度圖 if (image.empty()) { cout 《《 “read image failure” 《《 endl; return -1; } // 全局二值化 int th = 100; Mat global; threshold(image, global, th, 255, CV_THRESH_BINARY_INV); // 局部二值化 int blockSize = 25; int constValue = 10; Mat local; adaptiveThreshold(image, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue); imshow(“全局二值化”, global); imshow(“局部二值化”, local); waitKey(0); return 0; }

腐蝕操作

#include 《iostream》 #include 《opencv2opencv.hpp》 using namespace cv; using namespace std; int main() { Mat SrcPic = imread(“l(fā)ena.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(); return 0; }

運(yùn)行效果

均值濾波實(shí)現(xiàn)圖像模糊

#include 《iostream》 #include 《opencv2opencv.hpp》 using namespace cv; using namespace std; int main() { Mat SrcPic = imread(“l(fā)ena.jpg”); imshow(“Src Pic”, SrcPic); Mat DstPic; blur(SrcPic, DstPic, Size(7, 7)); imshow(“均值模糊效果圖”, DstPic); waitKey(); return 0; }

canny邊緣檢測(cè)

思路:將原始圖像轉(zhuǎn)化為灰度圖,用blur函數(shù)進(jìn)行圖像模糊以降噪,然后用canny函數(shù)進(jìn)行邊緣檢測(cè)。

#include 《iostream》 #include 《opencv2opencv.hpp》 using namespace cv; using namespace std; int main() { Mat SrcPic = imread(“l(fā)ena.jpg”); imshow(“Src Pic”, SrcPic); Mat DstPic, edge, grayImage; //創(chuàng)建與src同類(lèi)型和同大小的矩陣 DstPic.create(SrcPic.size(), SrcPic.type()); //將原始圖轉(zhuǎn)化為灰度圖 cvtColor(SrcPic, grayImage, COLOR_BGR2GRAY); //先使用3*3內(nèi)核來(lái)降噪 blur(grayImage, edge, Size(3, 3)); //運(yùn)行canny算子 Canny(edge, edge, 3, 9, 3); imshow(“邊緣提取效果”, edge); waitKey(); return 0; }

轉(zhuǎn)為灰度圖

#include《opencv2opencv.hpp》 #include《opencv2highguihighgui.hpp》 using namespace std; using namespace cv; int main() { Mat img = imread(“l(fā)ol1.jpg”); Mat dstImg; cvtColor(img, dstImg,COLOR_BGR2GRAY);//從宏名字就可以知道,是彩色圖轉(zhuǎn)換到灰度圖 imshow(“灰度圖”, dstImg); waitKey(0); }

灰度圖

訪問(wèn)圖片中像素

#include《opencv2opencv.hpp》 #include《opencv2highguihighgui.hpp》 using namespace std; using namespace cv; //訪問(wèn)每個(gè)像素,我喜歡使用指針的方式 int main() { Mat img = imread(“l(fā)ol1.jpg”); for (int i = 0; i 《 img.rows; i++) { uchar* data = img.ptr《uchar》(i); //獲取第i行地址 for (int j = 0; j 《 img.cols; j++) { printf(“%d ”,data[j]); } } waitKey(0); }

直方圖均衡化

#include《opencv2opencv.hpp》 #include《opencv2highguihighgui.hpp》 using namespace std; using namespace cv; //直方圖均衡化 int main() { Mat img = imread(“l(fā)ol3.jpg”); imshow(“原始圖”, img); Mat dst; cvtColor(img, img, CV_RGB2GRAY); imshow(“灰度圖”, img); equalizeHist(img, dst); imshow(“直方圖均衡化”, dst); waitKey(0); }

顯然均衡化后的圖片對(duì)比度變高了,變得更加明亮!

常用的數(shù)據(jù)結(jié)構(gòu)

#include《opencv2opencv.hpp》 #include《opencv2highguihighgui.hpp》 using namespace std; using namespace cv; //常見(jiàn)數(shù)據(jù)結(jié)構(gòu)使用方法總結(jié) int main() { //Mat的用法 Mat m1(2, 2, CV_8UC3, Scalar(0, 0, 255)); //其中的宏的解釋?zhuān)篊V_[位數(shù)][帶符號(hào)與否][類(lèi)型前綴]C[通道數(shù)] cout 《《 m1 《《 endl; //或者,利用IplImage指針來(lái)初始化,將IplImage*轉(zhuǎn)化為Mat IplImage* image = cvLoadImage(“l(fā)ena.jpg”); Mat mat = cvarrToMat(image);

//Mat轉(zhuǎn)IplImage: IplImage img = IplImage(mat); //或者 Mat m2; m2.create(4, 5, CV_8UC(2)); //點(diǎn)的表示:Point Point p; p.x = 1; //x坐標(biāo) p.y = 1; //y坐標(biāo) //或者 Point p2(1, 1);

//顏色的表示:Scalar(b,g,r);注意不是rgb,注意對(duì)應(yīng)關(guān)系 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; //兩個(gè)矩形求交集 Rect r4 = r1 & r2; //兩個(gè)矩形求并集 waitKey(0); }

結(jié)束語(yǔ)

由于時(shí)間和文章篇幅有限,本次總結(jié)先到這里,下次小白會(huì)為小伙伴們帶來(lái)OpenCV的濾波操作,各位小伙伴敬請(qǐng)期待。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器視覺(jué)
    +關(guān)注

    關(guān)注

    161

    文章

    4266

    瀏覽量

    119546
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41089

原文標(biāo)題:學(xué)習(xí)Opencv不得不掌握的操作

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    計(jì)算機(jī)視覺(jué)有哪些優(yōu)缺點(diǎn)

    計(jì)算機(jī)視覺(jué)作為人工智能領(lǐng)域的一個(gè)重要分支,旨在使計(jì)算機(jī)能夠像人類(lèi)一樣理解和解釋圖像和視頻的信息。這一技術(shù)的發(fā)展不僅推動(dòng)了多個(gè)行業(yè)的變革,也帶來(lái)了諸多優(yōu)勢(shì),但同時(shí)也伴隨著一些挑戰(zhàn)和局限
    的頭像 發(fā)表于 08-14 09:49 ?288次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),它提供了大量的圖像和視頻處理功能。
    的頭像 發(fā)表于 07-16 10:38 ?442次閱讀

    什么是機(jī)器視覺(jué)opencv?它有哪些優(yōu)勢(shì)?

    機(jī)器視覺(jué)(Machine Vision)是一種利用計(jì)算機(jī)和圖像處理技術(shù)來(lái)模擬人類(lèi)視覺(jué)系統(tǒng)的功能,實(shí)現(xiàn)對(duì)圖像的識(shí)別、分析和理解的技術(shù)。OpenCV(Open Source Compute
    的頭像 發(fā)表于 07-16 10:33 ?367次閱讀

    機(jī)器視覺(jué)計(jì)算機(jī)視覺(jué)有什么區(qū)別

    機(jī)器視覺(jué)計(jì)算機(jī)視覺(jué)是兩個(gè)密切相關(guān)但又有所區(qū)別的概念。 一、定義 機(jī)器視覺(jué) 機(jī)器視覺(jué),又稱(chēng)為計(jì)算機(jī)
    的頭像 發(fā)表于 07-16 10:23 ?287次閱讀

    計(jì)算機(jī)視覺(jué)的工作原理和應(yīng)用

    計(jì)算機(jī)視覺(jué)(Computer Vision,簡(jiǎn)稱(chēng)CV)是一門(mén)跨學(xué)科的研究領(lǐng)域,它利用計(jì)算機(jī)和數(shù)學(xué)算法來(lái)模擬人類(lèi)視覺(jué)系統(tǒng)對(duì)圖像和視頻進(jìn)行識(shí)別、理解、分析和處理。其核心目標(biāo)在于使
    的頭像 發(fā)表于 07-10 18:24 ?1071次閱讀

    計(jì)算機(jī)視覺(jué)與人工智能的關(guān)系是什么

    引言 計(jì)算機(jī)視覺(jué)是一門(mén)研究如何使計(jì)算機(jī)能夠理解和解釋視覺(jué)信息的學(xué)科。它涉及到圖像處理、模式識(shí)別、機(jī)器學(xué)習(xí)等多個(gè)領(lǐng)域的知識(shí)。人工智能則是研究如何使計(jì)算
    的頭像 發(fā)表于 07-09 09:25 ?306次閱讀

    計(jì)算機(jī)視覺(jué)與智能感知是干嘛的

    引言 計(jì)算機(jī)視覺(jué)(Computer Vision)是一門(mén)研究如何使計(jì)算機(jī)能夠理解和解釋視覺(jué)信息的學(xué)科。它涉及到圖像處理、模式識(shí)別、機(jī)器學(xué)習(xí)等多個(gè)領(lǐng)域,是人工智能的重要組成部分。智能
    的頭像 發(fā)表于 07-09 09:23 ?351次閱讀

    計(jì)算機(jī)視覺(jué)和機(jī)器視覺(jué)區(qū)別在哪

    計(jì)算機(jī)視覺(jué)和機(jī)器視覺(jué)是兩個(gè)密切相關(guān)但又有明顯區(qū)別的領(lǐng)域。 一、定義 計(jì)算機(jī)視覺(jué) 計(jì)算機(jī)
    的頭像 發(fā)表于 07-09 09:22 ?289次閱讀

    計(jì)算機(jī)視覺(jué)和圖像處理的區(qū)別和聯(lián)系

    計(jì)算機(jī)視覺(jué)和圖像處理是兩個(gè)密切相關(guān)但又有明顯區(qū)別的領(lǐng)域。 1. 基本概念 1.1 計(jì)算機(jī)視覺(jué) 計(jì)算機(jī)視覺(jué)
    的頭像 發(fā)表于 07-09 09:16 ?543次閱讀

    計(jì)算機(jī)視覺(jué)屬于人工智能嗎

    屬于,計(jì)算機(jī)視覺(jué)是人工智能領(lǐng)域的一個(gè)重要分支。 引言 計(jì)算機(jī)視覺(jué)是一門(mén)研究如何使計(jì)算機(jī)具有視覺(jué)
    的頭像 發(fā)表于 07-09 09:11 ?561次閱讀

    機(jī)器視覺(jué)計(jì)算機(jī)視覺(jué)的區(qū)別

    在人工智能和自動(dòng)化技術(shù)的快速發(fā)展,機(jī)器視覺(jué)(Machine Vision, MV)和計(jì)算機(jī)視覺(jué)(Computer Vision, CV)作為兩個(gè)重要的分支領(lǐng)域,都扮演著至關(guān)重要的角色
    的頭像 發(fā)表于 06-06 17:24 ?826次閱讀

    計(jì)算機(jī)視覺(jué)的主要研究方向

    計(jì)算機(jī)視覺(jué)(Computer Vision, CV)作為人工智能領(lǐng)域的一個(gè)重要分支,致力于使計(jì)算機(jī)能夠像人眼一樣理解和解釋圖像和視頻的信息。隨著深度學(xué)習(xí)、大數(shù)據(jù)等技術(shù)的快速發(fā)展,
    的頭像 發(fā)表于 06-06 17:17 ?521次閱讀

    計(jì)算機(jī)視覺(jué)的十大算法

    隨著科技的不斷發(fā)展,計(jì)算機(jī)視覺(jué)領(lǐng)域也取得了長(zhǎng)足的進(jìn)步。本文將介紹計(jì)算機(jī)視覺(jué)領(lǐng)域的十大算法,包括它們的基本原理、應(yīng)用場(chǎng)景和優(yōu)缺點(diǎn)。這些算法在圖像處理、目標(biāo)檢測(cè)、人臉識(shí)別等領(lǐng)域有著廣泛的應(yīng)
    的頭像 發(fā)表于 02-19 13:26 ?1046次閱讀
    <b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>的十大算法

    什么是計(jì)算機(jī)視覺(jué)?計(jì)算機(jī)視覺(jué)的三種方法

    計(jì)算機(jī)視覺(jué)是指通過(guò)為計(jì)算機(jī)賦予人類(lèi)視覺(jué)這一技術(shù)目標(biāo),從而賦能裝配線檢查到駕駛輔助和機(jī)器人等應(yīng)用。計(jì)算機(jī)缺乏像人類(lèi)一樣憑直覺(jué)產(chǎn)生
    的頭像 發(fā)表于 11-16 16:38 ?4164次閱讀
    什么是<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>?<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>的三種方法

    最適合AI應(yīng)用的計(jì)算機(jī)視覺(jué)類(lèi)型是什么?

    計(jì)算機(jī)視覺(jué)是指為計(jì)算機(jī)賦予人類(lèi)視覺(jué)這一技術(shù)目標(biāo),從而賦能裝配線檢查到駕駛輔助和機(jī)器人等應(yīng)用。計(jì)算機(jī)缺乏像人類(lèi)一樣憑直覺(jué)產(chǎn)生
    的頭像 發(fā)表于 11-15 16:38 ?346次閱讀
    最適合AI應(yīng)用的<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>類(lèi)型是什么?