your browser does not support the audio element.
測量所給的高度,即上下邊緣間的距離。
思路:
將進行閾值操作得到二值化。
擷取只包含上下邊框的部分,以便於後續的輪廓提取
輪廓檢測
得到結果
1.用於給新增中文字元
#用於給新增中文字元
def imgtext_cn(img, text, left, top, textcolor=(0, 255, 0), textsize=20):
if (isinstance(img, np.ndarray)): #判斷是否為opencv型別
img = image.fromarray(cv2.cvtcolor(img, cv2.color_bgr2rgb))
draw = imagedraw.draw(img)
fonttext = imagefont.truetype(r'c:\windows\fonts\simsun.ttc', textsize, encoding="utf-8") ##中文字型
draw.text((left, top), text, textcolor, font=fonttext) #寫文字
return cv2.cvtcolor(np.asarray(img), cv2.color_rgb2bgr)
2.實現反色功能#實現反色功能
def pointinvert(img):
height, width = img.shape #獲取尺寸
for i in range(height):
for j in range(width):
pi = img[i, j]
img[i, j] = 255 - pi
return img
4.邊緣檢測# canny邊緣檢測
edges = cv2.canny(th, 30, 70)
res=pointinvert(edges) #顏色反轉
#顯示cv2.imshow('original', th) #顯示二值化後的圖,主題為白色,背景為黑色 更加容易找出輪廓
key = cv2.waitkey(0)
if key==27: #按esc鍵時,關閉所有視窗
print(key)
cv2.destroyallwindows()
5.輪廓操作
cnt = contours[0] #取出輪廓
x, y, w, h = cv2.boundingrect(cnt) #用乙個矩形將輪廓包圍
img_gray = cv2.cvtcolor(res, cv2.color_gray2bgr) #將灰度轉化為彩色方便畫圖
cv2.line(img_gray, (x, y), (x + w, y), (0,0,255), 2, 5) #上邊緣
cv2.line(img_gray, (x, y+h), (x + w, y+h), (0, 0, 255), 2, 5) #下邊緣
img1[80:230, 90:230] = img_gray #用帶有上下輪廓的圖替換掉原圖的對應部分
6.顯示
res1=imgtext_cn(img1, '寬度%d'%h, 25, 25, textcolor=(0, 255, 0), textsize=30) #繪製文字
#顯示
cv2.imshow('original', res1)
key = cv2.waitkey(0)
if key==27: #按esc鍵時,關閉所有視窗
print(key)
cv2.destroyallwindows()
7.完整**import cv2
import numpy as np
from pil import image, imagedraw, imagefont
#用於給新增中文字元
def imgtext_cn(img, text, left, top, textcolor=(0, 255, 0), textsize=20):
if (isinstance(img, np.ndarray)): #判斷是否為opencv型別
img = image.fromarray(cv2.cvtcolor(img, cv2.color_bgr2rgb))
draw = imagedraw.draw(img)
fonttext = imagefont.truetype(r'c:\windows\fonts\simsun.ttc', textsize, encoding="utf-8") ##中文字型
draw.text((left, top), text, textcolor, font=fonttext) #寫文字
return cv2.cvtcolor(np.asarray(img), cv2.color_rgb2bgr)
#實現反色功能
def pointinvert(img):
height, width = img.shape #獲取尺寸
for i in range(height):
for j in range(width):
pi = img[i, j]
img[i, j] = 255 - pi
return img
img=cv2.imread("gongjian1.bmp",0) #載入彩色圖
img1=cv2.imread("gongjian1.bmp",1) #載入灰度圖
recimg = img[80:230, 90:230] #擷取需要的部分
img2 = img1[80:230, 90:230] #擷取需要的部分
ret, th = cv2.threshold(recimg, 90, 255, cv2.thresh_binary) #閾值操作二值化
# canny邊緣檢測
edges = cv2.canny(th, 30, 70)
res=pointinvert(edges) #顏色反轉
#顯示cv2.imshow('original', th) #顯示二值化後的圖,主題為白色,背景為黑色 更加容易找出輪廓
key = cv2.waitkey(0)
if key==27: #按esc鍵時,關閉所有視窗
print(key)
cv2.destroyallwindows()
cnt = contours[0] #取出輪廓
x, y, w, h = cv2.boundingrect(cnt) #用乙個矩形將輪廓包圍
img_gray = cv2.cvtcolor(res, cv2.color_gray2bgr) #將灰度轉化為彩色方便畫圖
cv2.line(img_gray, (x, y), (x + w, y), (0,0,255), 2, 5) #上邊緣
cv2.line(img_gray, (x, y+h), (x + w, y+h), (0, 0, 255), 2, 5) #下邊緣
img1[80:230, 90:230] = img_gray #用帶有上下輪廓的圖替換掉原圖的對應部分
res1=imgtext_cn(img1, '寬度%d'%h, 25, 25, textcolor=(0, 255, 0), textsize=30) #繪製文字
#顯示
cv2.imshow('original', res1)
key = cv2.waitkey(0)
if key==27: #按esc鍵時,關閉所有視窗
紅色輪廓沒有顯示,解決方案:將灰度圖轉化為彩色圖
學習了opencv的寬度測量,遇到了作業問題自己解決了,鍛鍊了自己的能力。
Python OpenCV教程6 閾值分割
固定閾值分割很直接,一句話說就是畫素點值大於閾值乙個值,小於閾值是另外乙個值。灰度圖讀入 閾值分割 ret,th cv2.threshold img,127,255,cv2.thresh binary cv2.imshow thresh th cv2.waitkey 0 cv2.threshold ...
實驗6總結
1.函式概述 2.函式的功能 3.函式使用說明 4.函式分類 1 庫函式 標準函式 是系統提供定義,使用者程式設計時可直接呼叫。printf scanf 2 使用者定義函式 是使用者自己編寫的用來解決具體問題的函式。cylinder max printstar 1 無參函式 不需要向函式傳遞引數。p...
6 輸入捕獲實驗
注意點 1 在學習的過程中我們使用到與串列埠實驗相類似的乙個暫存器 本質是乙個變數 用來處理不同的情況,在今後的學習也可以使用這種方法,這種暫存器的組成如下圖所示 2 確定捕獲到乙個完整高電平的軟體實現 包括如果處理接收到的高電平持續時間過長的情況 void tim2 irqhandler void...