国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Opencv系列之一:簡(jiǎn)介與基本使用

這篇具有很好參考價(jià)值的文章主要介紹了Opencv系列之一:簡(jiǎn)介與基本使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1 Opencv簡(jiǎn)介

Opencv是計(jì)算機(jī)視覺中經(jīng)典的專用庫(kù),其支持多語言,跨平臺(tái),功能強(qiáng)大。Opencv-Python為Opencv提供了Python接口,使得使用者在Python中能夠調(diào)用C/C++,在保證易讀性和運(yùn)行效率的前提下,實(shí)現(xiàn)所需的功能。

Opencv是由Gray Bradsky于1999年在英特爾創(chuàng)立,第一版于2000年問世。Vadim Pisarevsky加入Gary Bradsky,一起管理因特爾的俄羅斯軟件Opencv團(tuán)隊(duì)。

2005年,Opencv用于Stanley,該車贏得了2005年DARPA挑戰(zhàn)賽的冠軍。后來,在Willow Garage的支持下,它的積極發(fā)展得以繼續(xù),由Gary Bradsky和Vadim Pisarevsky領(lǐng)導(dǎo)了該項(xiàng)目。Opencv現(xiàn)在支持與計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)有關(guān)的多種算法,并且正在日益擴(kuò)展。

Opencv支持多種編程語言,例如C++, Python, Java等,并且可以再Windows , Linux , OS X , Android和IOS等不同平臺(tái)上使用。基于CUDA和OpenCL的高速GPU操作的接口也在積極開發(fā)中。

Opencv-Python是用于Opencv的Python API,結(jié)合了Opencv C++ API和Python語言的最佳特性。

1.1 Opencv-Python

Opencv-Python是旨在解決計(jì)算機(jī)視覺問題的專用庫(kù)
Python是由Guidovan Rossum發(fā)起的通用編程語言,很快就非常流行,主要是因?yàn)樗暮?jiǎn)單性和代碼可讀性。它使得程序員可以用較少的代碼行表達(dá)想法,而不會(huì)降低可讀性。

與C/C++之類的語言,Python速度較慢。也就是說,可以使用C/C++輕松擴(kuò)展Python,這使得我們能夠用C/C++編寫計(jì)算機(jī)密集型代碼并創(chuàng)建可用作Python模塊的Python包裝器。它給我們帶來了兩個(gè)好處: 首先,代碼與原始C/C++代碼一樣快(因?yàn)樗窃诤笈_(tái)運(yùn)行的實(shí)際C++代碼), 其次,在Python中比C/C++編寫代碼更容易。Opencv-Python是原始Opencv C++實(shí)現(xiàn)的Python包裝器。

Opencv-Python利用了Numpy,這是一個(gè)高度優(yōu)化的庫(kù),用于使用MATLAB樣式的語言進(jìn)行數(shù)值運(yùn)算。所有Opencv數(shù)組結(jié)構(gòu)都與Numpy數(shù)組相互轉(zhuǎn)換。這也使與使用Numpy的其他庫(kù)(例如Scipy和Matplotlib)的集成變得更加容易。

1.2 應(yīng)用領(lǐng)域

  • 人機(jī)互動(dòng)
  • 物體識(shí)別
  • 圖像分割
  • 人臉識(shí)別
  • 動(dòng)作識(shí)別
  • 運(yùn)動(dòng)跟蹤
  • 機(jī)器人
  • 運(yùn)動(dòng)分析
  • 機(jī)器視覺
  • 結(jié)構(gòu)分析
  • 汽車安全駕駛

如上所述,opencv的功能十分強(qiáng)大,在各個(gè)領(lǐng)域大放異彩,由淺入深,本次我們先介紹圖像編輯,簡(jiǎn)單的字母數(shù)字識(shí)別的相關(guān)部分,日后會(huì)繼續(xù)開始人臉識(shí)別,圖像分割,圖像定位等等功能;

2 opencv-python安裝與使用

首先我們需要安裝一下環(huán)境

  1. python3:安裝python3:python教程有詳細(xì)的說明,網(wǎng)址安裝python
  2. numpy:安裝numpy:pip install numpy
  3. opencv-python:安裝opencv-python: pip install opencv-python

安裝完opencv-python后命令行打開python交互式環(huán)境:import cv2 成功,便說明成功安裝了opencv-python

2.1 imread()

imread函數(shù)讀取數(shù)字圖像,先看一下官網(wǎng)對(duì)于該函數(shù)的定義

cv2.imread(path_of_image, intflag)

函數(shù)參數(shù)一: 需要讀入圖像的完整的路徑
函數(shù)參數(shù)二: 標(biāo)志以什么形式讀入圖像,可以選擇一下方式:

  • cv2.IMREAD_COLOR: 加載彩色圖像。任何圖像的透明度都將被忽略。它是默認(rèn)標(biāo)志
  • cv2.IMREAD_GRAYSCALE:以灰度模式加載圖像
  • cv2.IMREAD_UNCHANGED:保留讀取圖片原有的顏色通道
  • 1 :等同于cv2.IMREAD_COLOR
  • 0 :等同于cv2.IMREAD_GRAYSCALE
  • -1 :等同于cv2.IMREAD_UNCHANGED
color_img = cv2.imread("image_file/1.jpeg")
print(color_img.shape)

gray_img=cv2.imread("image_file/1.jpeg", cv2.IMREAD_GRAYSCALE)
print(gray_img.shape)

#把單通道圖像保存后,再讀取,仍然是3通道,相當(dāng)于將單通道復(fù)制到3個(gè)通道保存
cv2.imwrite("image_file/gray_1.jpeg",gray_img)

2.2 threshold()

這個(gè)函數(shù)作用是將圖片二值化,圖像的二值化,就是將圖像上的像素點(diǎn)的灰度值設(shè)置為0或255,也就是將整個(gè)圖像呈現(xiàn)出明顯的只有黑和白的視覺效果。二值化是圖像分割的一種最簡(jiǎn)單的方法。二值化可以把灰度圖像轉(zhuǎn)換成二值圖像。把大于某個(gè)臨界灰度值的像素灰度設(shè)為灰度極大值,把小于這個(gè)值的像素灰度設(shè)為灰度極小值,從而實(shí)現(xiàn)二值化。

畫圖舉例來說

cv.threshold()用來實(shí)現(xiàn)閾值分割,函數(shù)有4個(gè)參數(shù):

  • 參數(shù)1:要處理的原圖,一般是灰度圖,這也是上一步中處理的
  • 參數(shù)2:設(shè)定的閾值
  • 參數(shù)3:最大閾值,一般為255
  • 參數(shù)4:閾值的方式,主要有5種,分別為:THRESH_BINARY,THRESH_BINARY_INV,THRESH_TRUNC,THRESH_TOZERO 和 THRESH_TOZERO_INV

實(shí)例如下:
ret, th1 = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
ret, th2 = cv.threshold(img, 127, 255, cv.THRESH_BINARY_INV)
ret, th3 = cv.threshold(img, 127, 255, cv.THRESH_TRUNC)
ret, th4 = cv.threshold(img, 127, 255, cv.THRESH_TOZERO)
ret, th5 = cv.threshold(img, 127, 255, cv.THRESH_TOZERO_INV)

titles = [‘Original’, ‘BINARY’, ‘BINARY_INV’, ‘TRUNC’, ‘TOZERO’, ‘TOZERO_INV’]
images = [img, th1, th2, th3, th4, th5]

使用Matplotlib顯示
for i in range(6):
plt.subplot(2, 3, i + 1)
plt.imshow(images[i], ‘gray’)
plt.title(titles[i], fontsize=8)
plt.xticks([]), plt.yticks([]) # 隱藏坐標(biāo)軸
plt.show()

實(shí)際輸出:

對(duì)應(yīng)的官方中說明

2.3 morphologyEx()

形態(tài)學(xué)操作是根據(jù)圖像形狀進(jìn)行的簡(jiǎn)單操作。一般情況下對(duì)二值化圖像進(jìn)行的操作。需要輸入兩個(gè)參數(shù),一個(gè)是原始圖像,第二個(gè)被稱為結(jié)構(gòu)化元素或核,它是用來決定操作的性質(zhì)的。

兩個(gè)基本的形態(tài)學(xué)操作是腐蝕和膨脹。他們的變體構(gòu)成了開運(yùn)算,閉運(yùn)算,具體概念如下:

1)腐蝕:

就像土壤侵蝕一樣,這個(gè)操作會(huì)把前景物體的邊界腐蝕掉(但是前景仍然是白色)。這是怎么做到的呢?卷積核沿著圖像滑動(dòng),如果與卷積核對(duì)應(yīng)的原圖像的所有像素值都是1,那么中心元素就保持原來的像素值,否則就變?yōu)榱恪?br> 這會(huì)產(chǎn)生什么影響呢?根據(jù)卷積核的大小靠近前景的所有像素都會(huì)被腐蝕掉(變?yōu)?),所以前景物體會(huì)變小,整幅圖像的白色區(qū)域會(huì)減少。這對(duì)于去除白噪聲很有用,也可以用來斷開兩個(gè)連在一塊的物體等。

2)膨脹:

與腐蝕相反,與卷積核對(duì)應(yīng)的原圖像的像素值中只要有一個(gè)是1,中心元素的像素值就是1。
所以這個(gè)操作會(huì)增加圖像中的白色區(qū)域(前景)。一般在去噪聲時(shí)先用腐蝕再用膨脹。因?yàn)楦g在去掉白噪聲的同時(shí),也會(huì)使前景對(duì)象變小。所以我們?cè)賹?duì)他進(jìn)行膨脹。這時(shí)噪聲已經(jīng)被去除了,不會(huì)再回來了,但是前景還在并會(huì)增加。膨脹也可以用來連接兩個(gè)分開的物體。

3)開運(yùn)算:

先腐蝕,后膨脹。去除圖像中小的亮點(diǎn)(CV_MOP_OPEN);

4)閉運(yùn)算

先膨脹,后腐蝕。去除圖像中小的暗點(diǎn)(CV_MOP_CLOSE);

kernel = cv.getStructuringElement(cv.MORPH_RECT, (1, 8))
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv.imshow("MORPH_OPEN_1", opening)
cv2.waitKey(0)

kernel = cv.getStructuringElement(cv.MORPH_RECT, (1, 8))
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv.imshow("MORPH_OPEN_1", closing)
cv2.waitKey(0)

3 應(yīng)用案例

以上是opencv的簡(jiǎn)單使用,現(xiàn)在舉一個(gè)實(shí)際應(yīng)用的案例:識(shí)別驗(yàn)證碼,其實(shí)按照上面3個(gè)步驟就可以將圖片一步步處理,置灰,二值化,開運(yùn)算,最后就可以識(shí)別了。那么首先原圖如下:

1)首次處理效果,將圖片灰度化,二值化,為提取輪廓做準(zhǔn)備,二值化后,圖片非黑即白兩種,更有利于開閉運(yùn)算處理

src = cv2.imread('image_file/before.png')
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow("Binarization", binary)
cv2.waitKey(0)

2)基礎(chǔ)上面二值化圖片,對(duì)結(jié)果圖進(jìn)行開運(yùn)算處理,去除噪音部分

kernel = cv.getStructuringElement(cv.MORPH_RECT, (8, 1))
open_out = cv.morphologyEx(binl, cv.MORPH_OPEN, kernel)
cv.imshow("MORPH_OPEN_2", open_out)
cv2.waitKey(0)

3)最后一次處理,將背景置為白色,并且識(shí)別圖片識(shí)別碼

cv.bitwise_not(open_out, open_out)  
cv.imshow("Transform", open_out)
textImage = Image.fromarray(open_out)
text = pytesseract.image_to_string(textImage)  
cv2.waitKey(0)

4)最后打印出驗(yàn)證碼

4 總結(jié)

相信認(rèn)真一起看完上述知識(shí)點(diǎn),opencv-python已經(jīng)對(duì)于圖像的基本操作可以熟練掌握了,接下來會(huì)對(duì)數(shù)字圖像的一些其他概念進(jìn)行介紹,敬請(qǐng)期待~

作者:京東物流 張偉男

來源:京東云開發(fā)者社區(qū)?自猿其說Tech 轉(zhuǎn)載請(qǐng)注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-711512.html

到了這里,關(guān)于Opencv系列之一:簡(jiǎn)介與基本使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Flume 簡(jiǎn)介及基本使用

    Flume 簡(jiǎn)介及基本使用

    Apache?Flume?是一個(gè)分布式,高可用的數(shù)據(jù)收集系統(tǒng)。它可以從不同的數(shù)據(jù)源收集數(shù)據(jù),經(jīng)過聚合后發(fā)送到存儲(chǔ)系統(tǒng)中,通常用于日志數(shù)據(jù)的收集。Flume?分為?NG?和?OG?(1.0?之前)?兩個(gè)版本,NG?在?OG?的基礎(chǔ)上進(jìn)行了完全的重構(gòu),是目前使用最為廣泛的版本。下面的介紹均以

    2024年02月07日
    瀏覽(19)
  • Docker·1(簡(jiǎn)介、安裝、基本使用)

    Docker·1(簡(jiǎn)介、安裝、基本使用)

    虛擬機(jī): 操作系統(tǒng)是一個(gè)很笨重的程序,即是啥都不干,虛擬本身都要占用很多內(nèi)存和磁盤,并且啟動(dòng)很慢(操作系統(tǒng)要從頭到尾把該檢測(cè)的都檢測(cè)了,該加載的都加載上)。 容器: 類似于碼頭的集裝箱——相互隔離、長(zhǎng)期反復(fù)使用、快速裝載和卸載、規(guī)格標(biāo)準(zhǔn),在港口和

    2024年02月02日
    瀏覽(16)
  • 使用 Clojure 進(jìn)行 OpenCV 開發(fā)簡(jiǎn)介

    使用 Clojure 進(jìn)行 OpenCV 開發(fā)簡(jiǎn)介

    從 OpenCV 2.4.4 開始,OpenCV 支持使用與 Android 開發(fā)幾乎相同的接口進(jìn)行桌面 Java 開發(fā)。 Clojure?是由 Java 虛擬機(jī)托管的一種現(xiàn)代 LISP 方言,它提供了與底層 JVM 的完全互操作性。這意味著我們甚至應(yīng)該能夠使用 Clojure REPL(Read Eval Print Loop)作為底層 OpenCV 引擎的交互式可編程接口

    2024年01月16日
    瀏覽(18)
  • OrCAD(一)簡(jiǎn)介、安裝與基本使用

    OrCAD(一)簡(jiǎn)介、安裝與基本使用

    目錄 安裝 Crack 基本使用 新建工程 繪制元器件 去掉打開后開始頁面 CAD,全稱為管理軟件計(jì)算機(jī)輔助設(shè)計(jì)(Management Software Computer Aided Design ,MS-CAD)是指運(yùn)用計(jì)算機(jī)軟件在圖形化開發(fā)界面上進(jìn)行工作。CAD并不是指某個(gè)特定的軟件,而是某一類軟件。 在這一類軟件中,有一個(gè)軟

    2024年02月02日
    瀏覽(19)
  • 04- OpenCV:Mat對(duì)象簡(jiǎn)介和使用

    04- OpenCV:Mat對(duì)象簡(jiǎn)介和使用

    目錄 1、Mat對(duì)象與IplImage對(duì)象 2、Mat對(duì)象使用 3、Mat定義數(shù)組 4、相關(guān)的代碼演示 1、Mat對(duì)象與IplImage對(duì)象 先看看Mat對(duì)象:圖片在計(jì)算機(jī)眼里都是一個(gè)二維數(shù)組; 在OpenCV中, Mat 是一個(gè)非常重要的類,用于表示圖像或矩陣數(shù)據(jù)。 (1)Mat對(duì)象OpenCV2.0之后引進(jìn)的圖像數(shù)據(jù)結(jié)構(gòu)、 自動(dòng)

    2024年01月20日
    瀏覽(21)
  • Strimzi Kafka Bridge(橋接)實(shí)戰(zhàn)之一:簡(jiǎn)介和部署

    Strimzi Kafka Bridge(橋接)實(shí)戰(zhàn)之一:簡(jiǎn)介和部署

    這里分類和匯總了欣宸的全部原創(chuàng)(含配套源碼):https://github.com/zq2599/blog_demos 在strimzi技術(shù)體系中,橋接(bridge)是很要的功能,內(nèi)容也很豐富,因此將橋接相關(guān)的內(nèi)容從《strimzi實(shí)戰(zhàn)》系列中獨(dú)立出來,成立橋接相關(guān)的系列文章,便于分類和專項(xiàng)深入 本文是《Strimzi Kafka Bridge(橋

    2024年02月08日
    瀏覽(20)
  • Java中Excel文件解析(POI簡(jiǎn)介及基本使用)

    在Java技術(shù)生態(tài)圈中,可以進(jìn)行Excel文件處理的主流技術(shù)包括: Apache POI 、 JXL 、 Alibaba EasyExcel 等。 其中各個(gè)技術(shù)都有最適合的場(chǎng)景 Apache POI 基于 DOM 方式進(jìn)行解析,將文件直接加載內(nèi)存,所以速度較快,適合 Excel 文件數(shù)據(jù)量不大的應(yīng)用場(chǎng)景。 JXL 只支持Excel 2003以下版本,所以

    2024年02月08日
    瀏覽(36)
  • Doris-簡(jiǎn)介、架構(gòu)、編譯、安裝和數(shù)據(jù)表的基本使用

    Doris-簡(jiǎn)介、架構(gòu)、編譯、安裝和數(shù)據(jù)表的基本使用

    目錄 1、Doris簡(jiǎn)介 2、Doris網(wǎng)址 3、Doris架構(gòu) 3、編譯和安裝 3.1、軟硬件需求 3.2、編譯 3.2.1、安裝Docker環(huán)境 3.2.2、使用Docker 開發(fā)鏡像編譯 3.3、集群部署 3.3.1、創(chuàng)建目錄并拷貝編譯后的文件 3.3.2、部署 FE 節(jié)點(diǎn) 3.3.3、配置 BE 節(jié)點(diǎn) 3.3.4、在 FE 中添加所有 BE 節(jié)點(diǎn) 3.3.5、啟動(dòng) BE 3.3.6、部

    2024年02月21日
    瀏覽(19)
  • LeetCode買賣股票之一:基本套路(122)

    LeetCode買賣股票之一:基本套路(122)

    這里分類和匯總了欣宸的全部原創(chuàng)(含配套源碼):https://github.com/zq2599/blog_demos 在LeetCode上,有數(shù)道和買賣股票有關(guān)的題目,覆蓋了簡(jiǎn)單、中等、困難,要求都是選擇低價(jià)時(shí)間買入、高價(jià)時(shí)間賣出,以求達(dá)到利潤(rùn)最大化 這類題型的特點(diǎn)就是:典型的動(dòng)態(tài)規(guī)劃題型,掌握套路后,

    2024年02月09日
    瀏覽(20)
  • k8s包管理工具h(yuǎn)elm簡(jiǎn)介及基本使用

    k8s包管理工具h(yuǎn)elm簡(jiǎn)介及基本使用

    ?helm是k8s的包管理工具,類似于centos 的yum; ?當(dāng)前版本有helm2、helm3 相對(duì)來說helm3功能更加完善,使用更加方便 主要作用是相較于傳統(tǒng)的k8s部署應(yīng)用需要手工編排yaml文件(比如Deployment.yml、service.yml、ingress.yml等),使用helm可以快速部署應(yīng)用。 helm3與helm2 的區(qū)別在于helm3刪除了

    2024年02月14日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包