opencv——连接/控制工业相机(海康)

使用Python/opencv连接及控制海康工业相机

1.自动抓取图像

通过接受前步传输的指令而实现相机的自动抓取图像

import cv2
from datetime import datetime
while True: # 循环以不断拍摄

    ## 此处添加发出指令的程序
    B = 1  # 假定前步给的指令/信号

    if B == 1: # 接收到捕捉图像指令
        cap = cv2.VideoCapture(1, cv2.CAP_DSHOW)
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3072)  # 设置图像宽度
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 2048)  # 设置图像高度
        cap.set(cv2.CAP_PROP_FPS , 6)   # 设置帧率

        while True:
            reg, frame = cap.read()
            frame_1 = cv2.resize(frame, (640, 512))
            # 展示图片
            cv2.imshow('capture', frame_1)
            now = datetime.now()
            time = now.strftime("%Y-%m-%d,%H.%M.%S")
            filename = str(time) + '.jpg'  # filename为图像名字,将采集时间作为编号命名保存的截图
            cv2.imwrite('D:\\Project\\picture' + '\\' + filename, frame_1)  # 截图 前面为放在桌面的路径 frame为此时的图像
            print(filename + '保存成功')  # 打印保存成功
            break

        # 释放资源
        cap.release()
        cv2.destroyAllWindows()
        B = 0 # 等待下一次的指令
    else:
        print("未收到拍摄指令,等待下一次指令")
        B = 0 # 等待下一次的指令
2.定时抓取图像

通过自定义设置延时时间而实现相机的定时抓取图像

import cv2
import time

cap = cv2.VideoCapture(1, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3072)  # 设置图像宽度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 2048)  # 设置图像高度
cap.set(cv2.CAP_PROP_FPS , 6)   # 设置帧率

i = 0  # 定时装置初始值
a = 1  # 截图数量控制

while True:
    i = i + 1
    reg, frame = cap.read()
    frame_1 = cv2.resize(frame, (640, 512))
    # 展示图片
    cv2.imshow('capture', frame_1)
    time = time.strftime("%Y-%m-%d,%H.%M.%S", time.localtime())
    if i == 50:  # 定时装置,定时截屏,可以修改。
        filename = str(time) + '.jpg'  # filename为图像名字,将采集时间作为编号命名保存的截图
        cv2.imwrite('D:\\Project\\picture' + '\\' + filename, frame_1)  # 截图 前面为放在桌面的路径 frame为此时的图像
        print(filename + '保存成功')  # 打印保存成功
        i = 0  # 清零
        a = a + 1
        if a > 20:  # 最多截图20张(自定义) 然后退出
            break

    if cv2.waitKey(1) & 0xff == ord('q'):
        break
# 释放资源
cap.release()
cv2.destroyAllWindows()
3.特定按键控制抓取图像

通过自定义特定按键而实现相机的人为控制抓取图像

import cv2
import time
cap = cv2.VideoCapture(1,cv2.CAP_DSHOW)
# cap.set(cv2.CAP_PROP_POS_FRAMES,50)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3072)  # 设置图像宽度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 2048)  # 设置图像高度
cap.set(cv2.CAP_PROP_FPS , 6)   # 设置帧率
i = 1

# 也可写成while True
while(1):
    """
    ret:True或者False,代表有没有读取到图片
    frame:表示截取到一帧的图片
    """
    ret,frame = cap.read()
    frame_1 = cv2.resize(frame, (640, 512))
    # 展示图片
    cv2.imshow('capture',frame_1)
    time = time.strftime("%Y-%m-%d,%H.%M.%S", time.localtime())
    # 保存图片
    k=cv2.waitKey(1)
    if k==ord('k'): #自定义按键
        cv2.imwrite(r"D:\Project\picture\\"+ str(time) + ".jpg",frame_1) #存储路径
        i = i + 1
    if k==ord('q'):
        break
#释放对象和销毁窗口
cap.release()
cv2.destroyAllWindows()

以上就是三种实现Python/opencv工业相机控制的方法啦!

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
连接海康工业相机,需要使用海康SDK提供的API。以下是使用OpenCV连接海康工业相机的一些基本步骤: 1. 首先,需要安装海康SDK并设置好开发环境。 2. 在项目中引入SDK提供的头文件和库文件。 3. 使用SDK提供的函数初始化相机并打开相机。 4. 使用OpenCV的VideoCapture类连接相机。 以下是一个示例代码: ```cpp #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <HCNetSDK.h> using namespace std; using namespace cv; int main() { // 初始化SDK NET_DVR_Init(); // 登录设备 NET_DVR_USER_LOGIN_INFO struLoginInfo = {0}; struLoginInfo.bUseAsynLogin = 0; strcpy(struLoginInfo.sDeviceAddress, "192.168.1.64"); struLoginInfo.wPort = 8000; strcpy(struLoginInfo.sUserName, "admin"); strcpy(struLoginInfo.sPassword, "password"); NET_DVR_DEVICEINFO_V40 struDeviceInfo = {0}; long lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo); if (lUserID < 0) { cout << "Login failed, error code: " << NET_DVR_GetLastError() << endl; return -1; } // 打开预览 NET_DVR_PREVIEWINFO struPreviewInfo = {0}; struPreviewInfo.lChannel = 1; struPreviewInfo.dwStreamType = 0; struPreviewInfo.dwLinkMode = 0; struPreviewInfo.hPlayWnd = NULL; long lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPreviewInfo, NULL, NULL); if (lRealPlayHandle < 0) { cout << "RealPlay failed, error code: " << NET_DVR_GetLastError() << endl; NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return -1; } // 连接OpenCV VideoCapture cap(lRealPlayHandle + NET_DVR_GET_PREVIEW_FRAME); if (!cap.isOpened()) { cout << "Failed to connect to camera" << endl; NET_DVR_StopRealPlay(lRealPlayHandle); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return -1; } // 显示视频 Mat frame; while (true) { cap >> frame; if (frame.empty()) { cout << "Video stream interrupted" << endl; break; } imshow("Camera", frame); if (waitKey(30) >= 0) { break; } } // 释放资源 cap.release(); NET_DVR_StopRealPlay(lRealPlayHandle); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return 0; } ``` 需要注意的是,不同的海康相机型号可能具有不同的API,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值