我在找我选的尺寸的长方形。在代码中使用框宽和框高,但我发现各种矩形大小。
我有我的测试模式图像。要看到它,当你运行该程序,首先有两个显示器,第二次运行该程序,并移动弹出窗口到显示器的程序是不显示在弹出窗口。
我的程序不能检测到用线分割的矩形,并且有随机的字母和数字接触它。
这是我在测试模式中的第一个问题,这是顶部的图片。
第二个问题是测试图片中的底部图像,即当我调整canny和approxPolyDP数值以允许更多结果时,我在一个图像中得到太多结果。但我只是想找到我想要的大小的矩形。
下面是我代码和测试图片:
test picture
要使用测试图片,请运行程序并通过显示桌面视频的窗口对测试图片进行视频。
下面是我的代码,在Python 3中:
import numpy as np
import cv2
from mss import mss
from PIL import Image
import imutils
sct = mss()
BOX_WIDTH = 235
BOX_HEIGHT = 10
while 1:
w, h = 240, 640
monitor = {'top': 100, 'left': 900, 'width': w, 'height': h}
img = Image.frombytes('RGB', (w, h), sct.grab(monitor).rgb)
image_data = np.asarray(img)
# Convert the image to grayscale
gray = cv2.cvtColor(image_data, cv2.COLOR_BGR2GRAY)
# Perform Canny edge detection
edges = cv2.Canny(gray, 600900, 150) # i don't know what these values should be? so i used 900, 150 which makes less results
# Find contours in the edges image
hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
contours = imutils.grab_contours(hierarchy)
# Iterate over each contour
for contour in contours:
# Approximate the contour to a polygon
polygon = cv2.approxPolyDP(contour, 0.01004 * cv2.arcLength(contour, True), True) # detects if its a square or rectangle
# Check if the polygon has 4 sides
if len(polygon) <= 11:
# Draw the rectangle on the image
x, y, w, h = cv2.boundingRect(contour) # changed polygon to contour
ratio = float(w) / h
length = cv2.arcLength(contour, True)
half_width = BOX_WIDTH // 2
lift_height = BOX_HEIGHT // 6
if (length <= 950) and (length >= 100):
if not ((ratio >= 0.99) and (ratio <= 1.0)):
cv2.rectangle(image_data, (x, y), (x + half_width, y + BOX_HEIGHT - lift_height), (0, 0, 255), 2) # draws green box around rectangle
else:
cv2.rectangle(image_data, (x, y), (x + half_width, y + BOX_HEIGHT - lift_height), (0, 0, 255), 2) # draws green box around square
# Show the result
cv2.imshow('test', image_data)
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
字符串
为了解决我的第一个问题,我试着在列表中名为“4”的行中查看数字4。轮廓近似”,这里是文档的链接:
https://docs.opencv.org/4.x/dd/d49/tutorial_py_contour_features.html的
我尝试了一些测试代码,它没有修复它。我已经失去了测试代码。
对于我的第二个问题,我已经尝试调整我的代码中的值。canny、approxPolyDP、len(多边形)。
我修复了我的问题,我把好的代码放在第一篇文章中,编辑我发现了如何发布答案,所以我撤销编辑,并把旧的坏代码再次放在这篇文章中。现在我去做回答回答。
2条答案
按热度按时间deyfvvtc1#
如果你使用的是obs studio版本29. 1. 3,截至今天几天前我读了opencv更新说明,它说opencv可以运行obs studio虚拟相机!
你可以使用(源,显示捕捉),然后(启动虚拟相机),这样你就可以得到桌面视频,并有机会获得的东西videocapture提供太多!
下面是我使用obs studio捕获桌面屏幕时使用的代码:
字符串
n7taea2i2#
下面的代码与前面的代码不同,因为这段代码查找颜色,并且我将颜色设置为我正在搜索的矩形的颜色。
我包括了一个滑块,这样你就可以改变你搜索的颜色,当你找到它时,程序会把一个红色的矩形放在它找到的东西上。
字符串