python opencv相机调用

cv2.CAP_DSHOW 是一个视频捕获后端的标志参数,专门用于Windows平台的摄像头操作。作用如下: CAP_DSHOW 指定使用微软的 DirectShow API 作为视频捕获的后端框架。这是Windows操作系统特有的多媒体框架,用于管理视频/音频设备的输入输出

当使用默认后端(如cv2.VideoCapture(0))无法打开摄像头时,添加此参数可规避以下常见问题:

  • 摄像头驱动兼容性问题

  • 多摄像头切换失败

  • 分辨率设置异常

  • 中文路径或特殊字符导致初始化失败

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 0为摄像头索引

# 设置分辨率参数:

 w = 1280, h = 720

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)

cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

# 检查手动控制支持性 焦距及曝光
 

focus_supported = cap.get(cv2.CAP_PROP_FOCUS) >= 0

exposure_supported = cap.get(cv2.CAP_PROP_EXPOSURE) != 0

print(f"焦距支持: {focus_supported}, 曝光支持: {exposure_supported}")

# 第一步:关闭自动对焦

cap.set(cv2.CAP_PROP_AUTOFOCUS, 0) # 0表示关闭

# 第二步:设定焦距值(具体范围需查阅相机文档,普通USB摄像头常为0-255或0-1024)

cap.set(cv2.CAP_PROP_FOCUS, 300) # 示例值

设置曝光

# 第一步:关闭自动曝光(部分摄像头需设为手动模式)

cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 1) # 1=手动模式

# 第二步:设置曝光值(不同相机范围差异大) # 示例:Logitech C920的曝光值范围-13到-4(越接近0越亮) # 普通摄像头可能使用0-1范围

cap.set(cv2.CAP_PROP_EXPOSURE, -7) # 示例值

自动聚焦曝光,可以按J保存图片到D盘下面,并显示 焦距 和 曝光

import cv2

cap = cv2.VideoCapture(1, cv2.CAP_DSHOW)

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
if not cap.isOpened():
    raise IOError("无法打开摄像头")

# 检查相机是否支持调焦调曝光
focus_supported = cap.get(cv2.CAP_PROP_FOCUS) >= 0
exposure_supported = cap.get(cv2.CAP_PROP_EXPOSURE) != 0
print(f"焦距支持: {focus_supported}, 曝光支持: {exposure_supported}")

# # 第一步:关闭自动对焦
cap.set(cv2.CAP_PROP_AUTOFOCUS, 1)  # 0表示关闭


# 第一步:关闭自动曝光(部分摄像头需设为手动模式)
cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 0)  # 1=手动模式


i = 0
ret, img = cap.read()
print('输入j,下载当前图片')
print('输入q,终止程序')
while ret:
    cv2.imshow('img', img)
    ret, img = cap.read()

    if cv2.waitKey(1) & 0xFF == ord('j'):  # 按j保存一张图片
        i += 1
        firename = str('D:/LabelAOI/Test/' + str(i) + '.jpg')
        cv2.imwrite(firename, img)
        print('写入:', firename)
        current_focus = cap.get(cv2.CAP_PROP_FOCUS)
        current_exposure = cap.get(cv2.CAP_PROP_EXPOSURE)
        print(f"当前焦距: {current_focus}, 当前曝光: {current_exposure}")
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

手动设置焦距和曝光

import cv2
def camera(cameraID,  FOCUS, EXPOSURE, fun):
    cap = cv2.VideoCapture(cameraID, cv2.CAP_DSHOW)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
    if not cap.isOpened():
        raise IOError("无法打开摄像头")
    # 检查手动控制支持性(可选)
    focus_supported = cap.get(cv2.CAP_PROP_FOCUS) >= 0
    exposure_supported = cap.get(cv2.CAP_PROP_EXPOSURE) != 0
    print(f"焦距支持: {focus_supported}, 曝光支持: {exposure_supported}")
    # # 第一步:关闭自动对焦
    cap.set(cv2.CAP_PROP_AUTOFOCUS, 0)  # 0表示关闭
    # 第二步:设定焦距值(具体范围需查阅相机文档,普通USB摄像头常为0-255或0-1024)
    cap.set(cv2.CAP_PROP_FOCUS, FOCUS)   # 示例值

    # 第一步:关闭自动曝光(部分摄像头需设为手动模式)
    cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 1)  # 1=手动模式
    # 第二步:设置曝光值(不同相机范围差异大)
    # 示例:Logitech C920的曝光值范围-13到-4(越接近0越j亮)
    # 普通摄像头可能使用0-1范围
    cap.set(cv2.CAP_PROP_EXPOSURE, EXPOSURE)  # 示例值

    i = 0
    ret, img = cap.read()
    print('输入j,下载当前图片')
    print('输入q,终止程序')
    while ret:
        cv2.imshow('img', img)
        ret, img = cap.read()
        if not "NA":
            print("这里添加你想要做的所有功能。")
        if cv2.waitKey(1) & 0xFF == ord('j'):  # 按j保存一张图片
            i += 1
            firename = str('D:/LabelAOI/Test/' + str(i) + '.jpg')
            cv2.imwrite(firename, img)
            print('写入:', firename)
            current_focus = cap.get(cv2.CAP_PROP_FOCUS)
            current_exposure = cap.get(cv2.CAP_PROP_EXPOSURE)
            print(f"当前焦距: {current_focus}, 当前曝光: {current_exposure}")
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    #   相机ID, 焦距,  曝光度,  功能(拍照/扫码)
    camera(1, 75, -5, "NA")

建议先自动聚焦及曝光,获取         焦距 及 曝光度

然后手动设置以此节省排时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值