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

  • 相关阅读:
    Springboot 配置Swagger (亲测)
    阿里云服务器退款规则_退款政策全解析
    爬虫基本原理介绍、实现以及问题解决
    21天经典算法之直接插入排序
    FORCESPRO的使用教程(暂未完结)
    用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路
    ZZNUOJ_用C语言编写程序实现1541:除法(附完整源码)
    LeetCode 852. 山脉数组的峰顶索引
    基于Android课堂作业师生交流教学选课助手java mysql
    k8s-实战——yapi平台部署
  • 原文地址:https://blog.csdn.net/weixin_73368873/article/details/132702193