python使用opencv调用海康工业相机并用opencv显示
时间: 2023-11-20 08:58:24 浏览: 295
海康威视工业相机 +Opencv+C#+WPF
5星 · 资源好评率100%
以下是使用Python和OpenCV调用海康工业相机并显示的步骤:
1.安装海康SDK并配置环境变量。
2.安装Python和OpenCV。
3.导入必要的库和模块。
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
import cv2
from HCNetSDK import *
```
4.创建一个Qt窗口并在其中添加一个标签。
```python
class Video(QWidget):
def __init__(self):
super().__init__()
self.label = QLabel(self)
self.layout = QVBoxLayout()
self.layout.addWidget(self.label)
self.setLayout(self.layout)
```
5.初始化海康SDK并登录相机。
```python
def init_camera():
# 初始化SDK
if not NET_DVR_Init():
print("SDK初始化失败")
sys.exit()
# 登录相机
device_info = NET_DVR_DEVICEINFO_V30()
device_ip = "192.168.1.64"
device_port = 8000
device_username = "admin"
device_password = "12345"
device_id = NET_DVR_Login_V30(device_ip, device_port, device_username, device_password, device_info)
if device_id < 0:
print("登录相机失败")
sys.exit()
return device_id
```
6.获取相机数据并将其转换为OpenCV支持的格式。
```python
def get_frame(device_id):
# 获取相机数据
frame = NET_DVR_GetRealPlayImage(device_id)
# 将相机数据转换为OpenCV支持的格式
frame_data = frame.contents.pBuffer
frame_size = frame.contents.dwSize
frame_image = np.frombuffer(frame_data, dtype=np.uint8)
frame_image = frame_image.reshape((frame_size[1], frame_size[0], 4))
frame_image = cv2.cvtColor(frame_image, cv2.COLOR_BGRA2BGR)
return frame_image
```
7.在Qt窗口中显示相机数据。
```python
def show_camera():
app = QApplication(sys.argv)
video = Video()
video.show()
device_id = init_camera()
while True:
frame_image = get_frame(device_id)
frame_image = cv2.resize(frame_image, (640, 480))
frame_image = cv2.cvtColor(frame_image, cv2.COLOR_BGR2RGB)
video.label.setPixmap(QPixmap.fromImage(QImage(frame_image.data, frame_image.shape[1], frame_image.shape[0], QImage.Format_RGB888)))
if cv2.waitKey(1) & 0xFF == ord('q'):
break
NET_DVR_Logout(device_id)
NET_DVR_Cleanup()
sys.exit(app.exec_())
```
8.运行程序并显示相机数据。
```python
if __name__ == '__main__':
show_camera()
```
阅读全文