準備工作:python3.7, pycharm,opencv-python模塊。(不懂的話,網上有許多資料可供查詢)
全部代碼如下(直接可運行,需將圖片路徑換成自己電腦的圖片路徑)
import cv2 as cv import numpy as np # canny邊緣檢測 def canny_demo(image): t = 140 canny_output = cv.Canny(image, t, t * 2) cv.imshow("canny_output", canny_output) cv.imwrite("D:\\tupian\canny_output.png", canny_output) return canny_output # 讀取圖像 src1 = cv.imread("D:\\t0.bmp") src2 = cv.imread("D:\\t0.bmp") cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src1) # 調用 binary = canny_demo(src2) # 輪廓發現 contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) areas, arclens = [], [] for c in range(len(contours)): # 面積 areas.append(cv.contourArea(contours[c])) # 周長 arclens.append(cv.arcLength(contours[c], True)) area_id = areas.index(max(areas)) areamax = max(areas) arclenmax = max(arclens) # 矩形 rect = cv.minAreaRect(contours[area_id]) cx, cy = rect[0] box = cv.boxPoints(rect) box = np.int0(box) # 輪廓描繪 cv.drawContours(src1,[box],0,(0,255,0),2) cv.circle(src1, (np.int(cx), np.int(cy)), 2, (255, 0, 0), 2, 8, 0) cv.drawContours(src1, contours, area_id, (0, 0, 255), 2, 8) cv.putText(src2, "area:" + str(areamax), (50, 50), cv.FONT_HERSHEY_SIMPLEX, .7, (0, 0, 0), 1) cv.putText(src2, "arclen:" + str(arclenmax), (50, 90), cv.FONT_HERSHEY_SIMPLEX, .7, (0, 0, 0), 1) cv.putText(src2, "color:" + 'red' , (230,170), cv.FONT_HERSHEY_SCRIPT_SIMPLEX, .7, (0, 0, 0), 1) # 圖像顯示 cv.imshow("contours_analysis", src1) cv.imshow('', src2) cv.imwrite("D:\\tipian\area.png", src1) cv.waitKey(0) # cv.destroyAllWindows()
原始圖片:
代碼處理後的圖片:
更多功能和詳細的註釋請關注我的博客或者評論中留下方式