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

需求

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

获取红框

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

复制代码
import cv2  
import numpy as np  
  
# 加载图像并转换为灰度图像  
image = cv2.imread('image6.jpg')  
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  
  
# 应用高斯模糊以减少噪声  
blur = cv2.GaussianBlur(gray, (5, 5), 0)  
  
# 应用HSV颜色空间转换  
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)  
lower_red = np.array([0, 50, 50])  
upper_red = np.array([10, 255, 255])  
mask = cv2.inRange(hsv, lower_red, upper_red)  
  
# 应用膨胀操作来放大边框内的内容和边框  
kernel = np.ones((5,5),np.uint8)  
dilated = cv2.dilate(mask,kernel,iterations = 1)  
  
# 获取边界框坐标  
contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  
  
# 遍历每个轮廓并找到最大的红色边框  
max_contour = None  
max_area = 0  
for contour in contours:  
    area = cv2.contourArea(contour)  
    # if area > max_area:  
    #     max_contour = contour  
    #     max_area = area  
    x, y, w, h = cv2.boundingRect(contour)  
  
# 裁剪图像以显示边界框内的内容及其周围10px内容  
    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])]  
    
    # 在裁剪后的图像上绘制红色矩形框以突出显示边界框内的内容及其周围10px内容  
    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内容  
    #cv2.imshow('Content with Border and Surrounding Area', crop_image)  # 显示带有红色边框和周围10px内容的裁剪后的图像  
    cv2.imwrite(f'red_border_{x}_{y}_{w}_{h}.jpg', crop_image)  

    cv2.waitKey(0)  
    cv2.destroyAllWindows()
  
# 获取最大轮廓的边界框坐标  
# x, y, w, h = cv2.boundingRect(max_contour)  
  
# # 裁剪图像以显示边界框内的内容及其周围10px内容  
# 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])]  
  
# # 在裁剪后的图像上绘制红色矩形框以突出显示边界框内的内容及其周围10px内容  
# 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内容  
# cv2.imshow('Content with Border and Surrounding Area', crop_image)  # 显示带有红色边框和周围10px内容的裁剪后的图像  
  
# cv2.waitKey(0)  
# cv2.destroyAllWindows()

识别红框

复制代码
import cv2
import numpy as np

# 加载图像
image = cv2.imread('red_border_1038_1886_6_6.jpg')

# 将图像转换为灰度
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化图像
_, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 找到图像中的轮廓
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 遍历每个轮廓,判断是否是闭合的圆
for contour in contours:
    # 进行轮廓近似,获取近似的多边形轮廓
    epsilon = 0.01 * cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, epsilon, True)

    # 计算近似轮廓的周长
    approx_length = cv2.arcLength(approx, True)

    # 计算原始轮廓的周长
    contour_length = cv2.arcLength(contour, True)

    # 判断近似轮廓的周长是否接近于原始轮廓的周长
    if approx_length >= 0.9 * contour_length:
        # 绘制闭合的圆
        cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)
        cv2.putText(image, 'Closed Circle', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
        print("存在")

# 显示结果图像
cv2.imshow('Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
新智元3 小时前
全球第二易主,谷歌逆袭登顶!OpenAI 500 亿股票池曝光,Ilya 躺赚 40 亿
人工智能·openai
新智元3 小时前
1 人顶 1 个 Infra 团队!OpenAI 前 CTO 新招,让大模型训练跌成白菜价
人工智能·openai
俊哥V3 小时前
[深度分析]英伟达发布新一代 AI 芯片架构 Vera Rubin:AI 算力进入“成本—规模曲线重构”的关键时刻
人工智能·ai
摆烂咸鱼~3 小时前
机器学习(9-1)
人工智能·机器学习
AI指北4 小时前
AI速递 | 黄仁勋CES2026演讲:物理AI的“ChatGPT时刻”即将到来!
人工智能
梦梦代码精4 小时前
一个让 AI 应用“快速上线+私有部署+商业变现”的开源方案
人工智能·开源
柠檬07114 小时前
opencv mat 统计小于0的个数
人工智能·opencv·计算机视觉
数据猿4 小时前
【金猿CIO展】上海纽约大学信息技术部高级主任常潘:大数据铸基,AI赋能,从数字化校园向智慧有机体的十年跃迁
大数据·人工智能
大猪宝宝学AI4 小时前
【AI Infra】SonicMoE论文笔记
论文阅读·人工智能·性能优化
sww_10264 小时前
Spring-AI和LangChain4j区别
java·人工智能·spring