opencv實(shí)現(xiàn)礦石圖片檢測(cè)礦石數(shù)量
本文實(shí)例為大家分享了opencv礦石圖片檢測(cè)礦石數(shù)量的具體代碼,供大家參考,具體內(nèi)容如下
原始礦石圖片
此類圖片是高躁圖,二值化后圖像如下
采用膨脹的方法去除黑色噪點(diǎn)
二值圖黑白轉(zhuǎn)化dilateImg = 255 - dilateImg #黑白轉(zhuǎn)換
全部代碼如下:
import cv2 ? import numpy as np import matplotlib.pyplot as plt import pywt """原始圖像導(dǎo)入""" ? ? ? img = cv2.imread("000166.jpg") ? #img = cv2.resize(img, (1600, 896)) #cv2.imshow("original", img) """轉(zhuǎn)化為灰度圖像""" gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)? #cv2.imshow("gray", gray) """轉(zhuǎn)化為二值圖像 #dst0 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,251, 1) cv2.imshow("black&white", dst0)""" """圖像去躁 denose = cv2.fastNlMeansDenoising(gray,None,100,7,21) cv2.imshow("denosing", denose)""" """小波圖像去躁 coeffs = pywt.dwt2(gray, 'haar') cA1,(cH1, cV1, cD1) = coeffs cD1 = np.zeros(cD1.shape) + 255 coeffs = cA1,(cH1, cV1, cD1) denose = pywt.idwt2(coeffs, 'haar') cv2.imshow("denose", denose)""" """轉(zhuǎn)化為二值圖像""" dst1 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,251, 1) cv2.imshow("black&white", dst1) """膨脹用于排除小型黑洞""" kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(6,6)) ? #(此矩陣有關(guān)于黑點(diǎn)、噪點(diǎn)的去除) dilateImg = cv2.dilate(dst1, kernel) #erodImg = cv2.erode(dilateImg, kernel) cv2.imshow("erodImg&wdilateImg",dilateImg) """計(jì)算數(shù)目""" dilateImg = 255 - dilateImg #黑白轉(zhuǎn)換 imgs,contours,hierarchy = cv2.findContours(dilateImg,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) ?#輪廓檢測(cè)函數(shù) cv2.drawContours(dilateImg,contours,-1,(120,0,0),2) ?#繪制輪廓 cv2.imshow("calcuate",dilateImg) count=0 #礦石總數(shù) ares_avrg=0 ?#礦石平均 #遍歷找到的所有礦石 for cont in contours: ? ? ares = cv2.contourArea(cont)#計(jì)算包圍形狀的面積 ? ? if ares<50: ? #過(guò)濾面積小于50的形狀 ? ? ? ? continue ? ? count+=1 ? ?#總體計(jì)數(shù)加1 ? ? ares_avrg+=ares ? ? print("{}-blob:{}".format(count,ares),end=" ?") #打印出每個(gè)礦石的面積 ? ? rect = cv2.boundingRect(cont) #提取矩形坐標(biāo) ? ? print("x:{} y:{}".format(rect[0],rect[1]))#打印坐標(biāo) ? ? #cv2.rectangle返回值是x,y,w,h ? ? cv2.rectangle(img,(rect[0],rect[1]),(rect[0]+rect[2],rect[1]+rect[3]),(0,0,0xff),1)#繪制矩形 ? ? y=10 if rect[1]<10 else rect[1] #防止編號(hào)到圖片之外 ? ? cv2.putText(img,str(count), (rect[0], y), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 3) #在礦石左上角寫上編號(hào) print("礦石平均面積:{}".format(round(ares_avrg/ares,2))) #打印出每個(gè)礦石的面積 print(count) cv2.imshow("original", img) cv2.waitKey() #cv2.destroyAllWindows() # important part!
本來(lái)想用小波去躁,把HH全置255(看你目標(biāo)是用黑還是白表示,此處用黑色表示),效果不太好,只能選膨脹來(lái)搞了。
最后的結(jié)果如下:(話說(shuō)結(jié)果圖沒(méi)什么不能拖動(dòng)縮放呢- -。)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python使用Opencv實(shí)現(xiàn)圖像特征檢測(cè)與匹配的方法
- python opencv檢測(cè)目標(biāo)顏色的實(shí)例講解
- 10個(gè)步驟Opencv輕松檢測(cè)出圖片中條形碼
- Python 使用Opencv實(shí)現(xiàn)目標(biāo)檢測(cè)與識(shí)別的示例代碼
- Python Opencv實(shí)現(xiàn)單目標(biāo)檢測(cè)的示例代碼
- Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè)
- 使用OpenCV檢測(cè)圖像中的矩形
- OpenCV實(shí)現(xiàn)圖像角點(diǎn)檢測(cè)
- opencv?canny邊緣檢測(cè)算法詳解
- 基于OpenCV的路面質(zhì)量檢測(cè)的實(shí)現(xiàn)
相關(guān)文章
Python 解決相對(duì)路徑問(wèn)題:"No such file or directory"
這篇文章主要介紹了Python 解決相對(duì)路徑問(wèn)題:"No such file or directory"具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06小結(jié)Python用fork來(lái)創(chuàng)建子進(jìn)程注意事項(xiàng)
今天看到別人的源代碼中有 fork 子進(jìn)程來(lái)操作數(shù)據(jù)。但是由于 fork 之后,沒(méi)有及時(shí)的退出,導(dǎo)致系統(tǒng)中的Python進(jìn)程越來(lái)越多,子進(jìn)程越來(lái)越多了。2014-07-07Python 實(shí)現(xiàn)靜態(tài)鏈表案例詳解
這篇文章主要介紹了Python 實(shí)現(xiàn)靜態(tài)鏈表案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Python實(shí)現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解
這篇文章主要介紹了Python實(shí)現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解,zip() 函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的對(duì)象,這樣做的好處是節(jié)約了不少的內(nèi)存,需要的朋友可以參考下2023-08-08Python自定義主從分布式架構(gòu)實(shí)例分析
這篇文章主要介紹了Python自定義主從分布式架構(gòu),結(jié)合實(shí)例形式分析了主從分布式架構(gòu)的結(jié)構(gòu)、原理與具體的代碼實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-09-09Python 從一個(gè)文件中調(diào)用另一個(gè)文件的類方法
今天小編就為大家分享一篇Python 從一個(gè)文件中調(diào)用另一個(gè)文件的類方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01淺析python,PyCharm,Anaconda三者之間的關(guān)系
Python是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,簡(jiǎn)單來(lái)說(shuō),python就是類似于C,Java,C++等,一種編程語(yǔ)言。這篇文章主要介紹了淺析python,PyCharm,Anaconda三者之間的關(guān)系,需要的朋友可以參考下2019-11-11