从图像中提取矩形对象

2024-10-03 11:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

Testing image of voltmeter

所以我对这一领域相当陌生,一直在涉猎图像。由于缺乏更好的词汇,我的成绩一直不稳定。我基本上是在上面图像的变化中检测电压表,并提取白色区域或尽可能接近白色区域

问题是,它适用于图像的某些变体,但不适用于其他变体。因此,我的问题是:

  • 是否有某种快速有效的方法来检测和提取所需区域?(有点次要)
  • 对于你们中一些在该领域有实际经验和专业知识的人来说,这样一项任务背后的思维过程是什么

我试过:

  • 检查各种颜色空间和这些颜色空间中的特定平面,以便于信息提取
  • 直方图均衡化、阈值、模糊、边缘检测
  • 轮廓和一些奇怪的事情之间

我有点执着于实现一种“稳健”或某种“广义”的方法来检测上述图像变化中的上述区域

谢谢你的反馈


Tags: of方法图像image区域颜色空间变体
1条回答
网友
1楼 · 发布于 2024-10-03 11:23:17

代码如下:

import cv2
from matplotlib import pyplot as plt
im = cv2.imread("volt.jpg")

imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 150, 200, 0)
#imedge = cv2.Canny(imgray, 30, 200) 


contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 

plt.imshow(thresh)

voltcnt = 0
x = 0
for i in range(0, len(contours)):
    if cv2.contourArea(contours[i]) > 50000 and cv2.contourArea(contours[i]) < 100000:
        voltcnt = cv2.contourArea(contours[i])
        x = i
        
cv2.drawContours(im, contours[x], -1, (255, 0, 0), 3) 
plt.imshow(im)

以下是输出: enter image description here

您还可以尝试使用“cv2.SimpleBlobDetector()

相关问题 更多 >