<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
OpenCV是一個用於影象處理、分析、機器視覺方面的開源函數庫.
程式碼如下:
import cv2 import numpy as np
程式碼如下:
#顏色閾值 low_red = np.array([100, 100, 60]) up_red = np.array([180, 255, 255]) low_green = np.array([35, 43, 46]) up_green = np.array([77, 255, 255]) low_blue = np.array([90, 110, 110]) up_blue = np.array([124, 255, 255]) #記錄形狀 xz = {}
字典xz是待會記錄形狀用的
程式碼如下:
if __name__ == '__main__': image = cv2.imread('img_1.png')#讀取影象 image = cv2.resize(image, (500, 500))#重新裁剪影象 #image = cv2.GaussianBlur(image, (11, 11), 0)#高斯濾波 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) color_read(hsv, image)#處理圖片的函數 cv2.imshow('image', image) cv2.waitKey(0) cv2.destroyAllWindows()
程式碼如下:
def color_read(hsv, image): global xz blue = get_image(hsv, low_blue, up_blue)#使用獲取顏色空間的函數進行顏色獲取三種顏色 red = get_image(hsv, low_red, up_red) green = get_image(hsv, low_green, up_green) mask = blue + red + green #尋找影象的輪廓 cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] print('cnts:', len(cnts)) ##先判斷形狀再畫輪廓 for cnt in cnts: area = cv2.contourArea(cnt)#計算輪廓的面積 print('area:', area) if area > 1000: epsilon = 0.04 * cv2.arcLength(cnt, True)#計算輪廓長度 approx = cv2.approxPolyDP(cnt, epsilon, True)#計算輪廓角點 corners = len(approx) print(corners) #根據角點的個數判斷形狀 if corners == 3: a = '三角形' b = approx[0][0][0] # 根據三角形的角點判斷位置 xz[a] = b area, trgl = cv2.minEnclosingTriangle(cnt)#尋找三角形的輪廓 # 繪製三角形輪廓 for i in range(0, 3): cv2.line(image, tuple(trgl[i][0]), tuple(trgl[(i + 1) % 3][0]), (0, 255, 0), 2) elif corners == 4: a = '矩形' b = approx[0][0][0] xz[a] = b x, y, w, h = cv2.boundingRect(cnt)#尋找矩形輪廓 cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)#繪製矩形輪廓 else: #圓形這裡是處理的不好的地方所以我沒有用變數x1和z,因為畫出來的輪廓有點大 a = '圓' b = approx[0][0][0] xz[a] = b ((x1, y1), z) = cv2.minEnclosingCircle(cnt)#尋找圓形輪廓 x1 = int(x1) y1 = int(y1) z = int(z) cv2.circle(image, (150, y1), 60, (0, 255, 0), 2)#繪製圓形輪廓
程式碼如下:
#獲取影象hsv的方法 def get_image(hsv, low, up): mask = cv2.inRange(hsv, low, up)#獲取色彩空間 mask = cv2.erode(mask, None, 2)#腐蝕操作 mask = cv2.dilate(mask, None, 2)#膨脹操作 return mask
圖片之前拍的不是很好所以我截成了小圖,圖片拍的是幾何圖所以效果不太好,如果是平面的可能會好一點,圖二是列印字典xz的輸出。
#獲取影象hsv的方法 import cv2 import numpy as np #顏色閾值 low_red = np.array([100, 100, 60]) up_red = np.array([180, 255, 255]) low_green = np.array([35, 43, 46]) up_green = np.array([77, 255, 255]) low_blue = np.array([90, 110, 110]) up_blue = np.array([124, 255, 255]) #記錄形狀 xz = {} #獲取影象hsv的方法 def get_image(hsv, low, up): mask = cv2.inRange(hsv, low, up)#獲取色彩空間 mask = cv2.erode(mask, None, 2)#腐蝕操作 mask = cv2.dilate(mask, None, 2)#膨脹操作 return mask #獲取輪廓 def color_read(hsv, image): global xz blue = get_image(hsv, low_blue, up_blue)#使用獲取顏色空間的函數進行顏色獲取三種顏色 red = get_image(hsv, low_red, up_red) green = get_image(hsv, low_green, up_green) mask = blue + red + green #尋找影象的輪廓 cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] print('cnts:', len(cnts)) ##先判斷形狀再畫輪廓 for cnt in cnts: area = cv2.contourArea(cnt)#計算輪廓的面積 print('area:', area) if area > 1000: epsilon = 0.04 * cv2.arcLength(cnt, True)#計算輪廓長度 approx = cv2.approxPolyDP(cnt, epsilon, True)#計算輪廓角點 corners = len(approx) print(corners) #根據角點的個數判斷形狀 if corners == 3: a = '三角形' b = approx[0][0][0] # 根據三角形的角點判斷位置 xz[a] = b area, trgl = cv2.minEnclosingTriangle(cnt)#尋找三角形的輪廓 # 繪製三角形輪廓 for i in range(0, 3): cv2.line(image, tuple(trgl[i][0]), tuple(trgl[(i + 1) % 3][0]), (0, 255, 0), 2) elif corners == 4: a = '矩形' b = approx[0][0][0] xz[a] = b x, y, w, h = cv2.boundingRect(cnt)#尋找矩形輪廓 cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)#繪製矩形輪廓 else: a = '圓' b = approx[0][0][0] xz[a] = b ((x1, y1), z) = cv2.minEnclosingCircle(cnt)#尋找圓形輪廓 x1 = int(x1) y1 = int(y1) z = int(z) cv2.circle(image, (150, y1), 60, (0, 255, 0), 2)#繪製圓形輪廓 if __name__ == '__main__': image = cv2.imread('img_1.png')#讀取影象 image = cv2.resize(image, (500, 500))#重新裁剪影象 #image = cv2.GaussianBlur(image, (11, 11), 0)#高斯濾波 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) color_read(hsv, image)#處理圖片的函數 cv2.imshow('image', image) cv2.waitKey(0) cv2.destroyAllWindows() #對拿到的小球字典位置資料進行處理 xz[min(xz, key=xz.get)] = 1 xz[max(xz, key=xz.get)] = 3 xz[max(xz, key=xz.get)] = 2 xz = sorted(xz.items(), key=lambda x: x[1], reverse=False) xz = dict(xz) print(xz)
這是這個程式碼的詳細和功能介紹,希望能給大家一個參考,也希望大家多多支援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