gpt4 book ai didi

android - 使用 Android OpenCV 在图像中检测到图案时拍照

转载 作者:行者123 更新时间:2023-12-02 16:34:16 31 4
gpt4 key购买 nike

您好 stackoverflow 社区,我希望有人可以指导我解决下一个问题,我想做一个应用程序,当它检测到带有 3 个标记(角落里的黑色方 block )的纸张时拍照,类似于QR 会有。我读过一些关于 opencv 的内容,我认为这对我有更多帮助,但我还不是很清楚。

这是我的例子

Photo to capture with patterns

最佳答案

获得二值图像后,您可以使用轮廓近似和轮廓区域来查找轮廓和过滤器。如果近似轮廓的长度为四,那么它一定是一个正方形,如果它在下区域和上区域范围内,那么我们就检测到了一个标记。我们保留一个标记计数器,如果图像中存在三个标记,我们就可以拍照。这是该过程的可视化。

我们Otsu's threshold获得要检测的白色物体的二值图像。

enter image description here

从这里我们使用 cv2.findContours 找到轮廓并使用轮廓近似进行过滤 cv2.approxPolyDP除了轮廓面积cv2.contourArea .

检测到的标记以青色突出显示

enter image description here

我用 Python 实现了它,但你可以采用相同的方法

代码

import cv2

# Load image, grayscale, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Find contours and filter using contour approximation and contour area
marks = 0
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
area = cv2.contourArea(c)
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.04 * peri, True)
if len(approx) == 4 and area > 250 and area < 400:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(image, (x, y), (x + w, y + h), (200,255,12), 2)
marks += 1

# Sheet has 3 marks
if marks == 3:
print('Take photo')

cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()

关于android - 使用 Android OpenCV 在图像中检测到图案时拍照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60220632/

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