gpt4 book ai didi

python - 如何使用 Python OpenCV 在图像中查找单个数字?

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:54 33 4
gpt4 key购买 nike

我有一张类似于下面的图片。我想将两个数字 74 分开,如图所示,因为我想为这两个对象分别设置一个边界框。

enter image description here

我如何使用 OpenCV 做到这一点?我不知道,我该怎么做,我在想是否有某种方法可以使用 Sobel 运算符。唯一让我感到疲倦的是获得 Sobel。

s = cv2.Sobel(img, cv2.CV_64F,1,0,ksize=5)

enter image description here

但不知道如何从这里开始。

最佳答案

对图像中的图形进行分割和检测,主要思路如下:

  1. 使用 cv2.cvtColor() 将图像转换为灰度图
  2. 使用 cv2.GaussianBlur() 模糊图像
  3. 使用 cv2.Canny() 查找边
  4. 使用 cv2.findContours() 查找轮廓并使用从左到右排序 imutils.contours.sort_contours()以确保当我们遍历轮廓时,它们的顺序是正确的
  5. 遍历每个轮廓
    • 使用cv2.boundingRect()获取边界矩形
    • 使用 Numpy 切片找到每个轮廓的 ROI
    • 使用cv2.rectangle()绘制边界框矩形

Canny 边缘检测

enter image description here

检测到的轮廓

enter image description here

裁剪和保存的 ROI

enter image description here

输出

Contours Detected: 2

代码

import numpy as np
import cv2
from imutils import contours

# Load image, grayscale, Gaussian blur, Canny edge detection
image = cv2.imread("1.png")
original = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (3,3), 0)
canny = cv2.Canny(blurred, 120, 255, 1)

# Find contours and extract ROI
ROI_number = 0
cnts = cv2.findContours(canny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts, _ = contours.sort_contours(cnts, method="left-to-right")
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
ROI = original[y:y+h, x:x+w]
cv2.rectangle(image, (x,y), (x+w,y+h),(36, 255, 12), 3)
cv2.imwrite('ROI_{}.png'.format(ROI_number), ROI)
ROI_number += 1

print('Contours Detected: {}'.format(ROI_number))
cv2.imshow("image", image)
cv2.imshow("canny", canny)
cv2.waitKey()

关于python - 如何使用 Python OpenCV 在图像中查找单个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55782857/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com