日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python,opencv利用自适应阈值分割法实现微滴图像分割并计数

發布時間:2024/8/1 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python,opencv利用自适应阈值分割法实现微滴图像分割并计数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import cv2 import numpy as npblockSize = 31 value = -1#count = 0 #液滴總數 area = 0 #單個液滴面積 min_area = 40 max_area = 1500#閉運算 def close(image):kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))iClose = cv2.morphologyEx(image,cv2.MORPH_CLOSE,kernel)return iClose#開運算 def open(image):kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(16,16))iOpen = cv2.morphologyEx(image,cv2.MORPH_OPEN,kernel)return iOpen#查找輪廓 def findConftours(srcImage,binary):contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)cv2.drawContours(srcImage,contours,-1,(0,0,255),3)#遍歷所有的熒光區域,計數 def countAll(contours,image):global countcount = 0for i in range(np.size(contours)):area = cv2.contourArea(contours[i]) #計算閉合輪廓面積if (area < min_area) or (area > max_area):continueelse:count = count + 1(x,y),radius = cv2.minEnclosingCircle(contours[i])(x,y,radius) = np.int0((x,y,radius))cv2.circle(image,(x,y),radius,(0,0,255),2)return image,countdef cut():img = cv2.imread("E:/PythonWorkspace/yiingguang_image_process/images/1121.bmp")grayImage = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)img2 = img.copy()#ret, th1 = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY)# 第一個參數為原始圖像矩陣,第二個參數為像素值上限,第三個是自適應方法(adaptive method):# -----cv2.ADAPTIVE_THRESH_MEAN_C:領域內均值# -----cv2.ADAPTIVE_THRESH_GAUSSIAN_C:領域內像素點加權和,權重為一個高斯窗口# 第四個值的賦值方法:只有cv2.THRESH_BINARY和cv2.THRESH_BINARY_INV# 第五個Block size:設定領域大小(一個正方形的領域)# 第六個參數C,閾值等于均值或者加權值減去這個常數(為0相當于閾值,就是求得領域內均值或者加權值)# 這種方法理論上得到的效果更好,相當于在動態自適應的調整屬于自己像素點的閾值,而不是整幅圖都用一個閾值#th2 = cv2.adaptiveThreshold(grayImage, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize, value)#th3 = cv2.adaptiveThreshold(grayImage, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize, value)th4 = cv2.adaptiveThreshold(grayImage, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blockSize, value)#cv2.imshow('img', grayImage)#cv2.imshow('th1', th1)#cv2.imshow('th2', th2)#cv2.imshow('th3', th3)cv2.imshow('th4', th4)close_image = th4#去除噪聲,形態學操作#閉運算iClose = close(close_image)cv2.imshow("close",iClose)#開運算后iOpen = open(iClose)cv2.imshow("close_and_open",iOpen)binary,contours,hirarchy = cv2.findContours(iOpen,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)print("所有的熒光區域:"+format(np.size(contours)))#顯示輪廓res = cv2.drawContours(img,contours,-1,(0,0,255),2)#tmp = np.zeros(img.shape,np.uint8)#res = cv2.drawContours(tmp, contours, -1, (0, 0, 255), 2)cv2.imshow("cut_res",res)cv2.imwrite("adaptiveThreshold_cut_res.bmp",res)#繪制最小外接圓res,count = countAll(contours,img2)cv2.imshow("cirle_res",res)cv2.imwrite("adaptiveThreshold_cirle_res.bmp",res)print("篩選后的熒光亮點數:"+format(count))cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':cut()

?

總結

以上是生活随笔為你收集整理的python,opencv利用自适应阈值分割法实现微滴图像分割并计数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。