import cv2
import numpy as np
import pyautogui
from pyzbar.pyzbar import decode
# 自定义区域的坐标和大小
region = (1024, 0, 900, 500) # 替换为你想要的区域
# 设置要显示的窗口大小
window_width = 900
window_height = 500
while True:
# 捕获屏幕的指定区域
screenshot = pyautogui.screenshot(region=region)
img = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)
# 图像预处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度图像
blurred = cv2.GaussianBlur(gray, (7, 7), 0) # 增加模糊程度
# 增强对比度
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
gray = clahe.apply(gray)
# 使用自适应阈值
binary = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 15, 2)
# 解码二维码
decoded_objects = decode(binary) # 使用处理后的图像进行解码
# 在识别到的二维码周围画框
for obj in decoded_objects:
points = obj.polygon
if len(points) == 4: # 确保是四个顶点
pts = np.array(points, dtype=np.int32)
cv2.polylines(img, [pts], isClosed=True, color=(0, 255, 0), thickness=3)
# 绘制文本
x, y, w, h = cv2.boundingRect(pts)
cv2.putText(img, obj.data.decode('utf-8'), (x, y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# 调整图像大小
img_resized = cv2.resize(img, (window_width, window_height))
# 显示结果
cv2.imshow('QR Code Detection', img_resized)
# 按 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
Python求一个模糊二维码识别的方法,和直接在屏幕上绘制框选框的方法
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
吃不了席 2024-09-04 20:47关注以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
为了实现一个模糊二维码识别方法,我们可以使用Python编程语言和OpenCV库。首先,我们需要导入所需的模块,并设置一些参数。在这个例子中,我们将使用一个简单的框架来处理二维码。
步骤1:安装必要的库
确保已经安装了OpenCV库。如果没有安装,可以使用pip install opencv-python命令进行安装。
步骤2:读取图片
import cv2 import numpy as np img = cv2.imread("path_to_your_image.jpg") # 替换为您实际的图片路径 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blurred_img = cv2.GaussianBlur(gray_img, (7, 7), 0) binary_img = cv2.adaptiveThreshold(blurred_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, 2) # 解码二维码 decoded_objects = decode(binary_img) # 使用处理后的图像进行解码步骤3:绘制二维码框
接下来,我们可以通过在图像上添加矩形来标记已检测到的二维码:
for obj in decoded_objects: points = obj.polygon if len(points) == 4: # 确保是四个顶点 pts = np.array(points, dtype=np.int32) cv2.polylines(img, [pts], isClosed=True, color=(0, 255, 0), thickness=3) # 绘制文本 x, y, w, h = cv2.boundingRect(pts) cv2.putText(img, obj.data.decode('utf-8'), (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)步骤4:调整图像大小并显示
最后,通过
resize函数调整图像尺寸,并将其显示出来。img_resized = cv2.resize(img, (window_width, window_height)) cv2.imshow('QR Code Detection', img_resized) cv2.waitKey(0) cv2.destroyAllWindows()现在,您应该可以看到一个带有二维码边框的图像。这个过程涉及到图像预处理、二维码解码以及在图像上绘制二维码边框。根据您的具体需求,可能还需要对图像进行进一步的处理(例如增强对比度)以提高识别效果。
请注意,这个示例代码仅用于演示目的。在实际应用中,您可能需要考虑更复杂的数据集和更高级的模型。如果您有特定问题或需要进一步的帮助,请随时告诉我!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报