Python+OpenCV實現圖像特定區域寬度測量


在Jupyter Notebook上使用Python+opencv實現如下圖像特定區域寬度測量。關於opencv庫的安裝可以參考:Python下opencv庫的安裝過程與一些問題匯總

 

 

1.實現代碼

import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont

#用於給圖片添加中文字符
def ImgText_CN(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    if (isinstance(img, numpy.ndarray)):  #判斷是否為OpenCV圖片類型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img)
    fontText = ImageFont.truetype("font/simhei.ttf", textSize, encoding="utf-8")
    draw.text((left, top), text, textColor, font=fontText)
return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

#讀取原圖片
image=cv2.imread("gongjian1.bmp")
cv2.imshow("image", image)
#截取目標區域
rect=image[80:200, 120:205]#裁剪坐標為[y0:y1, x0:x1]
#閾值分割
ret,image1=cv2.threshold(rect, 80, 255, cv2.THRESH_BINARY_INV)
cv2.imshow('image1', image1)
#邊緣提取
image2 = cv2.Canny(rect,80,255) 
cv2.imshow('image2', image2)
#圖像反色
image3 = 255 - cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)#將灰度圖image2轉換為RGB彩圖后反色,轉換為彩圖是為了后面畫有顏色的線
cv2.imshow('image3', image3)
image4 = 255 - cv2.cvtColor(image1, cv2.COLOR_RGB2GRAY)#將圖像image1反色,黑色為背景,白色為目標,方便后面cv2.findContours()提取物體輪廓
cv2.imshow('image4', image4)
#提取物體輪廓
contours, hierarchy = cv2.findContours(image4, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)#輸入圖像image4,輪廓檢索方式cv2.RETR_EXTERNAL,輪廓近似方法cv2.CHAIN_APPROX_SIMPLE,返回輪廓contours和輪廓的層析結構hierarchy
cnt = contours[0]
x, y, w, h = cv2.boundingRect(cnt)#輸入cnt,返回x,y,w,h:x,y是矩陣左上點的坐標,w,h是矩陣的寬和高
# 繪制直線
cv2.line(image3, (x, y), (x + w, y), (0,0,255), 2)#輸入image3,在起始點(x, y)和終止點(x + w, y)之間畫一條直線,紅色,線條粗細為2
cv2.line(image3, (x, y+h), (x + w, y+h), (0,0,255), 2)
image[80:200, 120:205] = image3#在image上截取的部分替換為image3
cv2.imshow("image5",image)
image=ImgText_CN(image, '寬:'+str(w), 10, 20, textColor=(0, 255, 0), textSize=30)
cv2.imshow("image6",image)
cv2.waitKey(0)

 

2.運行結果

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM