python调用海康工业相机,官方给出的SDK里没有转到opencv格式的例子,网上找了下,只有一篇,转换部分的代码如下:
temp = np.asarray(pData2) # 将c_ubyte_Array转化成ndarray得到(3686400,)
temp = temp.reshape((2592, 2048, 1)) # 根据自己分辨率进行转化
gray = cv2.cvtColor(temp,cv2.COLOR_BGR2GRAY)
cv2.imshow("img", gray)
但是ctypes的格式转np.array的会报错,网上的说法是numpy的版本问题,试了试没解决,搜了半天,找到一个可行的,代码如下(就是在海康SDK的例子里改的):
winfun_ctype = WINFUNCTYPE
stFrameInfo = POINTER(MV_FRAME_OUT_INFO_EX)
pData = POINTER(c_ubyte)
FrameInfoCallBack = winfun_ctype(None, pData, stFrameInfo, c_void_p)
def image_callback(pData2, pFrameInfo, pUser):
stFrameInfo = cast(pFrameInfo, POINTER(MV_FRAME_OUT_INFO_EX)).contents
if stFrameInfo:
b = string_at(pData2, 2592 * 2048 * 1)
nparr = np.frombuffer(b, np.uint8)
nparr = nparr.reshape(2048, 2592, 1)
cv2.imshow(" dst ", nparr)
cv2.waitKey(1)
python调用海康工业相机,官方给出的SDK里没有转到opencv格式的例子,网上找了下,只有一篇,转换部分的代码如下:temp = np.asarray(pData2) # 将c_ubyte_Array转化成ndarray得到(3686400,)temp = temp.reshape((2592, 2048, 1)) # 根据自己分辨率进行转化gray = cv2.cvtColor(temp,cv2.COLOR_BGR2GRAY)cv2.imshow("img", gray)但是ct
linux版本环境比较麻烦,要注意自己的硬件系统是x86还是ARM等等,
我个人是ubuntu18
https://www.hikrobotics.com/cn/machinevision/service/download?module=0在
海康
官方下载其linux版本的MVS,下载完成后有很多版本的,根据自己电脑是x86或者arm来选择解压,同时在其中文文档中根据要求需要配置好环境变量!!!
文件夹中的
海康
文档给出了命令行
可以在终端中输入export查看环境变量是否导入了路径
第一次添加环境变量后需要重启(这点可能因人而异)
压缩包中有两个文件夹
一个是直接运行的脚本
一个是封装成类
根据需要自取,运行hik2cv.py即可
主动获取
图像
有两种方式:
方式一:调用 MV_CC_StartGrabbing_NET() 开始采集,需要自己开启一个buffer,然后在应用层循环调用 MV_CC_GetOneFrameTimeout_NET() 获取指定像素
格式
的帧
数据
,获取帧
数据
时上层应用程序需要根据帧率控制好调用该接口的频率。
方式二:调用 MV_CC_StartGrabbing_NET(...
在
海康
威视sdk的官方示例中加入
opencv
sharp读取图片
数据
到Mat类型。
网上没找到这个方面的,自己研究了一下,其实关键代码就这句:
Mat image = new Mat(FrameInfo.nHeight, FrameInfo.nWidth, MatType.CV_8U, pBufForDriver);
理解了
数据
在内存中是什么样子就好了
class GrabImage
from ctypes.wintypes import DWORD
from ctypes.wintypes import WORD
from ctypes.wintypes import LONG
from ctypes.wintypes import BYTE
# 报警信息列表,报一次在回调中加1次记录
alarm_info = []
fun_c
我司最近有款轮式巡检机器人用到了
海康
机器人的
工业
相机
MV-CA060-10GC,我们的开发平台是树莓派(运行Ubuntu Server 1804),开发语言是Java,但该
相机
没有Java SDK,于是我决定自己开发一个。
好消息是
海康
机器人提供了C语言的SDK,这样我就能通过JNA直接调用,而不必写一行C代码。
问题的提出
开发过程中发现,有2个API在Windows下正常运行,在树莓派下却总是报错误的参数,错误码80000004
第一个API负责获取原始
图像
,第二个负责将原始
图像
压缩编码成jpg
#
opencv
转
二进制图片
def Mat2bytes(image):
return np.array(cv2.imencode('.jpg', image)[1]).tobytes()
2. bytes
转
opencv
# 二进制图片
转
opencv
图像
def bytes2Mat(image):
return cv2.imdecode(np.array(bytearray(image), dtype='uint8'), cv2.IMREAD_UNCHAN
# 绘制矩形框
x, y, w, h = 100, 100, 200, 200
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 提取 ROI
roi = img[y:y+h, x:x+w]
# 显示结果
cv2.imshow('image', img)
cv2.imshow('roi', roi)
cv2.waitKey(0)
cv2.destroyAllWindows()