<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
#pip install opencv-python==4.4.0.42 opencv-contrib-python==4.4.0.42 import cv2 import numpy as np from matplotlib import pyplot as plt import matplotlib.image as mpimg import matplotlib as mpl from PIL import Image mpl.rcParams['figure.dpi'] = 200 #載入影象 img = cv2.imread('test.png') plt.axis('off') plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show() #灰度影象 img1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #cornerHarris要求img是flaot32位元 img1 = np.float32(img1) #Harris角點檢測函數 # • img - 資料型別為 float32 的輸入影象。 # • blockSize - 角點檢測中要考慮的領域大小。 # • ksize - Sobel 求導中使用的視窗大小 # • k - Harris 角點檢測方程中的自由引數,取值引數為 [0,04,0.06]. dst = cv2.cornerHarris(img1,10,3,0.04) plt.axis('off') plt.imshow(dst, cmap='gray') plt.show() #膨脹 dst = cv2.dilate(dst,None) plt.axis('off') plt.imshow(dst, cmap='gray') plt.show() #顯示經過處理後的圖片 threshold = 0.01*dst.max() img[dst>threshold]=[255,0,0] #[255,0,0] - 點的顏色:藍色, [0,255,0] - 綠色, [0,0,255] - 紅色, #[0,0,0] -白色, [255,255,255] - 黑色 plt.axis('off') plt.imshow(img, cmap='gray') plt.show() #使用另一種角點檢測函數 corners = cv2.goodFeaturesToTrack(gray, 6, 0.01, 5) corners = np.int0(corners) for i in corners: x, y = i.ravel() cv2.circle(img, (x, y), 5, [0,0,0], -1) plt.axis('off') plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show() #直線檢測 img = cv2.imread("road.jpeg") plt.axis('off') plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show() #canny 方法檢測邊緣 返回二值影象 edges = cv2.Canny(gray, 150, 300) plt.axis('off') plt.imshow(edges, cmap='gray') plt.show() #HoughLinesP方法判斷哪些邊緣是直線 lines = cv2.HoughLinesP(edges, rho=1.0,theta=np.pi/180,threshold=20,minLineLength=30,maxLineGap=10) line_img = np.zeros((img.shape[0], img.shape[1], 3), dtype=np.uint8) line_color = [0, 255, 0] line_thickness = 2 dot_color = [0, 255, 0] dot_size = 3 #講檢測的直線疊加到原圖 for line in lines: for x1, y1, x2, y2 in line: cv2.line(line_img, (x1, y1), (x2, y2), line_color, line_thickness) cv2.circle(line_img, (x1, y1), dot_size, dot_color, -1) cv2.circle(line_img, (x2, y2), dot_size, dot_color, -1) final = cv2.addWeighted(img, 0.8, line_img, 1.0, 0.0) plt.axis('off') plt.imshow(cv2.cvtColor(final, cv2.COLOR_BGR2RGB)) plt.show()
主要介紹OpenCV自帶的直線檢測函數HoughLines()的用法,這個函數的第一個引數是一個二值化影象,所以在進行霍夫變換之前要首先進行二值化,或者進行Canny 邊緣檢測。第二和第三個值分別代表β 和 θ 的精確度。
第四個引數是閾值,只有累加其中的值高於閾值時才被認為是一條直線,也可以把它看成能檢測到的直線的最短長度(以畫素點為單位)。返回值就是(β; θ)。β 的單位是畫素,θ的單位是弧度。
看程式碼
#直線檢測 #使用霍夫直線變換做直線檢測,前提條件:邊緣檢測已經完成 import cv2 as cv import numpy as np import matplotlib.pylab as plt #標準霍夫線變換 def line_detection(image): gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY) edges = cv.Canny(gray, 50, 150, apertureSize=3) #apertureSize引數預設其實就是3 cv.imshow("edges", edges) lines = cv.HoughLines(edges, 1, np.pi/180, 80) for line in lines: rho, theta = line[0] #line[0]儲存的是點到直線的極徑和極角,其中極角是弧度表示的。 a = np.cos(theta) #theta是弧度 b = np.sin(theta) x0 = a * rho #代表x = r * cos(theta) y0 = b * rho #代表y = r * sin(theta) x1 = int(x0 + 1000 * (-b)) #計算直線起點橫座標 y1 = int(y0 + 1000 * a) #計算起始起點縱座標 x2 = int(x0 - 1000 * (-b)) #計算直線終點橫座標 y2 = int(y0 - 1000 * a) #計算直線終點縱座標 注:這裡的數值1000給出了畫出的線段長度範圍大小,數值越小,畫出的線段越短,數值越大,畫出的線段越長 cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) #點的座標必須是元組,不能是列表。 cv.imshow("image-lines", image) #統計概率霍夫線變換 def line_detect_possible_demo(image): gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY) edges = cv.Canny(gray, 50, 150, apertureSize=3) # apertureSize引數預設其實就是3 lines = cv.HoughLinesP(edges, 1, np.pi / 180, 60, minLineLength=60, maxLineGap=5) for line in lines: x1, y1, x2, y2 = line[0] cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) cv.imshow("line_detect_possible_demo",image) src = cv.imread(r'..edge.jpg') print(src.shape) cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE) cv.imshow('input_image', src) line_detection(src) src = cv.imread(r'..edge.jpg') #呼叫上一個函數後,會把傳入的src陣列改變,所以呼叫下一個函數時,要重新讀取圖片 line_detect_possible_demo(src) cv.waitKey(0) cv.destroyAllWindows()
看效果
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45