You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OpenCV设置分辨率后摄像头自动对焦异常求助

解决OpenCV设置1080P分辨率后NexiGo N660P对焦异常的问题

针对你遇到的NexiGo N660P在OpenCV设置1920x1080分辨率时对焦模糊,但系统相机和不设分辨率时正常的问题,试试以下几个针对性方案:

1. 强制指定摄像头帧率

你的摄像头支持60FPS,OpenCV默认可能使用较低帧率(比如30FPS),这可能干扰摄像头的自动对焦逻辑。在设置分辨率后添加帧率设置:

import cv2

cam = cv2.VideoCapture(0)
# 先设置分辨率
cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) 
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
# 指定60FPS帧率
cam.set(cv2.CAP_PROP_FPS, 60)

cv2.namedWindow("Bild")

img_counter = 0

while True:
    ret, frame = cam.read()
    if not ret:
        print("Fehler")
        break
    cv2.imshow("Bild", frame)

    k = cv2.waitKey(1)
    if k%256 == 27:
        print("Kamerastream geschlossen")
        break
    elif k%256 == 32:
        img_name = "Foto_{}.png".format(img_counter)
        cv2.imwrite(img_name, frame)
        print("{} gespeichert".format(img_name))
        img_counter += 1

cam.release()
cv2.destroyAllWindows()

2. 手动强制开启连续自动对焦

设置分辨率后,OpenCV可能意外重置了摄像头的对焦模式,手动开启自动对焦并设置为连续模式:

import cv2

cam = cv2.VideoCapture(0)
cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) 
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
# 开启自动对焦
cam.set(cv2.CAP_PROP_AUTOFOCUS, 1)
# 设置对焦模式为连续自动对焦(部分摄像头需要这个参数)
cam.set(cv2.CAP_PROP_FOCUS, 0)

cv2.namedWindow("Bild")

img_counter = 0

while True:
    ret, frame = cam.read()
    if not ret:
        print("Fehler")
        break
    cv2.imshow("Bild", frame)

    k = cv2.waitKey(1)
    if k%256 == 27:
        print("Kamerastream geschlossen")
        break
    elif k%256 == 32:
        img_name = "Foto_{}.png".format(img_counter)
        cv2.imwrite(img_name, frame)
        print("{} gespeichert".format(img_name))
        img_counter += 1

cam.release()
cv2.destroyAllWindows()

3. 更换OpenCV的摄像头后端

Windows上OpenCV默认的后端可能对某些USB摄像头的兼容性不佳,尝试使用CAP_DSHOW或CAP_MSMF后端:

import cv2

# 使用CAP_DSHOW后端打开摄像头
cam = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# 或者尝试CAP_MSMF:cam = cv2.VideoCapture(0, cv2.CAP_MSMF)
cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) 
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cam.set(cv2.CAP_PROP_FPS, 60)

cv2.namedWindow("Bild")

img_counter = 0

while True:
    ret, frame = cam.read()
    if not ret:
        print("Fehler")
        break
    cv2.imshow("Bild", frame)

    k = cv2.waitKey(1)
    if k%256 == 27:
        print("Kamerastream geschlossen")
        break
    elif k%256 == 32:
        img_name = "Foto_{}.png".format(img_counter)
        cv2.imwrite(img_name, frame)
        print("{} gespeichert".format(img_name))
        img_counter += 1

cam.release()
cv2.destroyAllWindows()

4. 先获取摄像头支持的精确分辨率格式

有些摄像头的1080P模式可能对应特定的格式(比如YUY2或MJPG),先枚举摄像头支持的所有格式,再选择匹配的1920x1080模式:

import cv2

def get_camera_resolutions(cap):
    resolutions = []
    for width in [1920, 1280, 640]:
        for height in [1080, 720, 480]:
            if cap.set(cv2.CAP_PROP_FRAME_WIDTH, width) and cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height):
                actual_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
                actual_height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
                if (actual_width, actual_height) not in resolutions:
                    resolutions.append((actual_width, actual_height))
    return resolutions

cam = cv2.VideoCapture(0)
print("摄像头支持的分辨率:", get_camera_resolutions(cam))
# 选择精确的1920x1080
cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) 
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
# 额外设置格式为MJPG(如果支持,很多高清摄像头用这个格式)
cam.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G'))

cv2.namedWindow("Bild")

img_counter = 0

while True:
    ret, frame = cam.read()
    if not ret:
        print("Fehler")
        break
    cv2.imshow("Bild", frame)

    k = cv2.waitKey(1)
    if k%256 == 27:
        print("Kamerastream geschlossen")
        break
    elif k%256 == 32:
        img_name = "Foto_{}.png".format(img_counter)
        cv2.imwrite(img_name, frame)
        print("{} gespeichert".format(img_name))
        img_counter += 1

cam.release()
cv2.destroyAllWindows()

这些方案的核心思路是:解决OpenCV与摄像头在分辨率、帧率、格式或后端兼容性上的不匹配,因为系统相机能正常工作说明硬件本身没问题,问题出在OpenCV对摄像头参数的控制逻辑上。

内容的提问来源于stack exchange,提问作者Lennart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:15:17