|
@@ -0,0 +1,114 @@
|
|
|
+import cv2
|
|
|
+import numpy as np
|
|
|
+import matplotlib.pyplot as plt
|
|
|
+import imutils
|
|
|
+from collections import defaultdict
|
|
|
+#import datetime
|
|
|
+
|
|
|
+#start = datetime.datetime.now()
|
|
|
+import time
|
|
|
+start = time.process_time()
|
|
|
+def makepic():
|
|
|
+ count = 1000
|
|
|
+ for x in range(count):
|
|
|
+ img = np.ones((1,60),dtype=np.uint8)
|
|
|
+ img[0,range(0,20)]=250
|
|
|
+ img[0,range(20,40)]=30
|
|
|
+ img[0,range(40,60)]=250
|
|
|
+ filename = 'make' + str(x) + '.bmp'
|
|
|
+ print(filename)
|
|
|
+ cv2.imwrite(filename, img)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+def detectionpic():
|
|
|
+ image = cv2.imread("make0.bmp")
|
|
|
+ image2 = cv2.imread("make1.bmp")
|
|
|
+ image_v = cv2.vconcat([image, image2]) # 垂直組合
|
|
|
+
|
|
|
+ count = 998
|
|
|
+ for x in range(count):
|
|
|
+ # 讀取圖檔
|
|
|
+ filename = 'make' + str(int(x * 1)) + '.bmp'
|
|
|
+ print(filename)
|
|
|
+ image = cv2.imread(filename)
|
|
|
+ image_v = cv2.vconcat([image_v, image])
|
|
|
+ cv2.imwrite("total.bmp", image_v)
|
|
|
+ # 讀取圖檔
|
|
|
+ filename = 'total.bmp'
|
|
|
+ image = cv2.imread(filename)
|
|
|
+ # 轉為灰階
|
|
|
+ gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
|
|
+
|
|
|
+ # 模糊化圖片
|
|
|
+ blurred = cv2.GaussianBlur(gray, (11, 11), 0)
|
|
|
+ cv2.imshow('Blur',blurred)
|
|
|
+ cv2.waitKey(0)
|
|
|
+
|
|
|
+ # Canny 尋找邊緣
|
|
|
+ edged = cv2.Canny(blurred, 30, 150)
|
|
|
+ cv2.imshow('Edged',edged)
|
|
|
+ cv2.waitKey(0)
|
|
|
+
|
|
|
+ # findContour 確定輪廓
|
|
|
+ _,contours, hierarchy = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
|
|
+ img2 = image.copy()
|
|
|
+ cv2.drawContours(img2, contours, -1, (0, 255, 0), 2)
|
|
|
+ cv2.imshow('contour',img2)
|
|
|
+ cv2.imwrite('check.bmp',img2)
|
|
|
+ cv2.waitKey(0)
|
|
|
+
|
|
|
+ cnt = contours[0]
|
|
|
+
|
|
|
+ #contourArea 計算面積
|
|
|
+ area = cv2.contourArea(cnt) #計算面積
|
|
|
+ perimeter = cv2.arcLength(cnt,True) #計算周長
|
|
|
+
|
|
|
+ if area < 19119:
|
|
|
+ print('破損豆噴調',area)
|
|
|
+ else:
|
|
|
+ pass
|
|
|
+ print('面積:',area, '周長:',perimeter) #印出結果
|
|
|
+ '''
|
|
|
+ p = 0
|
|
|
+ d = 0
|
|
|
+ tt = np.array(gray[0])
|
|
|
+ print(tt)
|
|
|
+ count = len(tt)
|
|
|
+ print(len(tt))
|
|
|
+
|
|
|
+ for i in tt[:]:
|
|
|
+ if i >= 150:
|
|
|
+ p = p + 1
|
|
|
+ elif i <= 130:
|
|
|
+ d = d + 1
|
|
|
+ print('要得豆子像素:',p)
|
|
|
+ print('壞的豆子像素:',d)
|
|
|
+
|
|
|
+ coffeebean = (d / count)*100
|
|
|
+ print('壞豆佔全部百分比:',coffeebean)
|
|
|
+ if coffeebean > 60:
|
|
|
+ record = record + 1
|
|
|
+ print('紀錄次數:', record)
|
|
|
+ else:
|
|
|
+ pass
|
|
|
+ if record == 50:
|
|
|
+ j = 1
|
|
|
+ # record=0
|
|
|
+ print('噴嘴啟動')
|
|
|
+ # break
|
|
|
+ # continue
|
|
|
+'''
|
|
|
+#makepic()
|
|
|
+detectionpic()
|
|
|
+#end = datetime.datetime.now()
|
|
|
+#print("執行時間:", end - start)
|
|
|
+# 結束測量
|
|
|
+end = time.process_time()
|
|
|
+# 輸出結果
|
|
|
+print("執行時間:%f 秒" % (end - start))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|