• 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()

  • 相关阅读:
    11.26
    wx.getPrivacySetting 小程序隐私保护指引的使用(复制粘贴即用)
    第九章(1):循环神经网络与pytorch示例(RNN实现股价预测)
    分布式常见问题丨高并发时重复提交,基于Redis的幂等性解决方案来啦
    Spring IOC源码:invokeBeanFactoryPostProcessors 后置处理器详解
    【GlobalMapper精品教程】025:影像数据集的建立与巧妙使用
    行情分析——加密货币市场大盘走势(10.16)
    【毕业设计】基于单片机的指纹识别门禁系统设计 -物联网 stm32 嵌入式
    道可云元宇宙每日资讯|第九届元宇宙数字人设计大赛在京开幕
    [Python]实现短信验证码的发送
  • 原文地址:https://blog.csdn.net/weixin_73368873/article/details/132702193