氿 柒 2022-09-17 22:44 采纳率: 0%
浏览 10

关于#opencv#的问题,如何解决?

本人初学opencv使用4.6,写demo时遇到一点问题,还请各位帮忙解答

import numpy as np
import cv2
import math

font = cv2.FONT_HERSHEY_SIMPLEX

def cv_show(name,img):
   cv2.imshow(name, img)
   cv2.waitKey(0)
   cv2.destroyAllWindows()

def open_image(image):
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    image = cv2.dilate(image, kernel)
    image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

    # image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
    return image

warped = cv2.imread(r"D:\Pictures\picture\photo3.jpg")
hsv_img = cv2.cvtColor(warped, cv2.COLOR_BGR2HSV)
white_circle_num = 0
white_rect_num = 0
lower_white = np.array([75, 0, 158])  # 颜色范围低阈值
upper_white = np.array([118, 64, 247])  # 颜色范围高阈值
mask_white = cv2.inRange(hsv_img, lower_white, upper_white)  # 根据颜色范围删选
mask_white = cv2.GaussianBlur(mask_white, (5, 5), 0)  # 中值滤波
mask_white = open_image(mask_white)
print(mask_white.shape)
# mask_white = cv2.threshold(mask_white, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]

# cv2.imwrite('mask_white.jpg', mask_white)
mask_white = cv2.Canny(mask_white, 75, 200)
cv_show('mask_white', mask_white)

print(1)
contours4 = cv2.findContours(mask_white, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[0]
# contours4 = sorted(contours4, key=cv2.contourArea, reverse=True)[:7]
print(2)
for cnt4 in range(len(contours4)):
    print(5)
    area = cv2.contourArea(cnt4)
    print(3)
    center, radius = cv2.minEnclosingCircle(cnt4)  # 圆心半径
    print(4)
    print(radius)
    rate = area / (math.pi * radius * radius)
    if radius > 100 and radius < 160:
        print(radius)
        if rate >= 0.9:
            cv2.circle(warped, (int(center[0]), int(center[1])), int(radius), (255, 255, 0), 2)
            cv2.putText(warped, 'white_circle', (int(center[0]), int(center[1])), font, 1, (0, 255, 0), 2)
            white_circle_num += 1
        elif rate > 0.6 and rate < 0.9:
            rect = cv2.minAreaRect(cnt4)
            box = cv2.boxPoints(rect)
            box = np.int0(box)
            # cv2.circle(img,(int(center[0]),int(center[1])),int(radius),(255,0,255),5)
            warped = cv2.drawContours(warped, [box], 0, (255, 255, 0), 2)
            cv2.putText(warped, 'white_rect', (int(center[0]), int(center[1])), font, 1, (0, 255, 0), 2)
            white_rect_num += 1
            cv_show("white_dect", warped)



img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-17 23:27
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 9月17日

悬赏问题

  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛