• opencv识别一张图片的多个红框,并截取红框的内容


    需求

     需要获取图片的红框的内容,实体的图片我就不放了

    获取红框

    先截取获得图片的多个轮廓

    1. import cv2
    2. import numpy as np
    3. # 加载图像并转换为灰度图像
    4. image = cv2.imread('image6.jpg')
    5. gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    6. # 应用高斯模糊以减少噪声
    7. blur = cv2.GaussianBlur(gray, (5, 5), 0)
    8. # 应用HSV颜色空间转换
    9. hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    10. lower_red = np.array([0, 50, 50])
    11. upper_red = np.array([10, 255, 255])
    12. mask = cv2.inRange(hsv, lower_red, upper_red)
    13. # 应用膨胀操作来放大边框内的内容和边框
    14. kernel = np.ones((5,5),np.uint8)
    15. dilated = cv2.dilate(mask,kernel,iterations = 1)
    16. # 获取边界框坐标
    17. contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    18. # 遍历每个轮廓并找到最大的红色边框
    19. max_contour = None
    20. max_area = 0
    21. for contour in contours:
    22. area = cv2.contourArea(contour)
    23. # if area > max_area:
    24. # max_contour = contour
    25. # max_area = area
    26. x, y, w, h = cv2.boundingRect(contour)
    27. # 裁剪图像以显示边界框内的内容及其周围10px内容
    28. crop_image = image[max(y-10, 0):min(y+h+10, image.shape[0]), max(x-10, 0):min(x+w+10, image.shape[1])]
    29. # 在裁剪后的图像上绘制红色矩形框以突出显示边界框内的内容及其周围10px内容
    30. cv2.rectangle(crop_image, (max(x-10, 0), max(y-10, 0)), (min(x+w+10, image.shape[1]), min(y+h+10, image.shape[0])), (0, 0, 255), 2) # 在裁剪后的图像上绘制红色矩形框以突出显示边界框内的内容及其周围10px内容
    31. #cv2.imshow('Content with Border and Surrounding Area', crop_image) # 显示带有红色边框和周围10px内容的裁剪后的图像
    32. cv2.imwrite(f'red_border_{x}_{y}_{w}_{h}.jpg', crop_image)
    33. cv2.waitKey(0)
    34. cv2.destroyAllWindows()
    35. # 获取最大轮廓的边界框坐标
    36. # x, y, w, h = cv2.boundingRect(max_contour)
    37. # # 裁剪图像以显示边界框内的内容及其周围10px内容
    38. # crop_image = image[max(y-10, 0):min(y+h+10, image.shape[0]), max(x-10, 0):min(x+w+10, image.shape[1])]
    39. # # 在裁剪后的图像上绘制红色矩形框以突出显示边界框内的内容及其周围10px内容
    40. # cv2.rectangle(crop_image, (max(x-10, 0), max(y-10, 0)), (min(x+w+10, image.shape[1]), min(y+h+10, image.shape[0])), (0, 0, 255), 2) # 在裁剪后的图像上绘制红色矩形框以突出显示边界框内的内容及其周围10px内容
    41. # cv2.imshow('Content with Border and Surrounding Area', crop_image) # 显示带有红色边框和周围10px内容的裁剪后的图像
    42. # cv2.waitKey(0)
    43. # cv2.destroyAllWindows()

    识别红框

    1. import cv2
    2. import numpy as np
    3. # 加载图像
    4. image = cv2.imread('red_border_1038_1886_6_6.jpg')
    5. # 将图像转换为灰度
    6. gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    7. # 二值化图像
    8. _, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    9. # 找到图像中的轮廓
    10. contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    11. # 遍历每个轮廓,判断是否是闭合的圆
    12. for contour in contours:
    13. # 进行轮廓近似,获取近似的多边形轮廓
    14. epsilon = 0.01 * cv2.arcLength(contour, True)
    15. approx = cv2.approxPolyDP(contour, epsilon, True)
    16. # 计算近似轮廓的周长
    17. approx_length = cv2.arcLength(approx, True)
    18. # 计算原始轮廓的周长
    19. contour_length = cv2.arcLength(contour, True)
    20. # 判断近似轮廓的周长是否接近于原始轮廓的周长
    21. if approx_length >= 0.9 * contour_length:
    22. # 绘制闭合的圆
    23. cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
    24. cv2.putText(image, 'Closed Circle', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
    25. print("存在")
    26. # 显示结果图像
    27. cv2.imshow('Result', image)
    28. cv2.waitKey(0)
    29. cv2.destroyAllWindows()

  • 相关阅读:
    web前端网页设计期末课程大作业:旅游网页主题网站设计——紫色的旅游开发景点网站静态模板(4页)HTML+CSS+JavaScript
    Android自定义视图
    使用AfxGetApp()->GetMainWnd()而不是AfxGetMainWnd()使得MFC主程序接收辅助线程发送的消息
    java一体化智慧工地信息管理平台源码 智慧工地APP源码
    从零开始的C++(十一)
    【机器学习】--- 深度学习中的注意力机制
    a16z:推翻互联网的偶然君主制,如何设计Web3平台治理?
    以sqlilabs靶场为例,讲解SQL注入攻击原理【15-17关】
    Scroll 生态明星项目Pencils Protocol,发展潜力巨大
    大势所趋!低代码带来开发行业新一轮春风
  • 原文地址:https://blog.csdn.net/weixin_73368873/article/details/132702193