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:tupiancanny_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:tipianarea.png", src1)

cv.waitKey(0)

# cv.destroyAllWindows()

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐