boring_student 2024-09-04 20:46 采纳率: 60%
浏览 29
已结题

Python求一个模糊二维码识别的方法,和直接在屏幕上绘制框选框的方法


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()


  • 写回答

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()
    

    现在,您应该可以看到一个带有二维码边框的图像。这个过程涉及到图像预处理、二维码解码以及在图像上绘制二维码边框。根据您的具体需求,可能还需要对图像进行进一步的处理(例如增强对比度)以提高识别效果。

    请注意,这个示例代码仅用于演示目的。在实际应用中,您可能需要考虑更复杂的数据集和更高级的模型。如果您有特定问题或需要进一步的帮助,请随时告诉我!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月12日
  • 已采纳回答 9月8日
  • 创建了问题 9月4日