添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
# 显示图像 def image_show(image): image = cv2.resize(image, (600, 400), interpolation=cv2.INTER_AREA) cv2.imshow('fgmask', image) k = cv2.waitKey(1) & 0xff # 需要显示的图像数据转换 def image_control(data , stFrameInfo): if stFrameInfo.enPixelType == 17301505: image = data.reshape((stFrameInfo.nHeight, stFrameInfo.nWidth)) image_show(image=image) elif stFrameInfo.enPixelType == 17301514: data = data.reshape(stFrameInfo.nHeight, stFrameInfo.nWidth, -1) image = cv2.cvtColor(data, cv2.COLOR_BAYER_GB2RGB) image_show(image=image) elif stFrameInfo.enPixelType == 35127316: data = data.reshape(stFrameInfo.nHeight, stFrameInfo.nWidth, -1) image = cv2.cvtColor(data, cv2.COLOR_RGB2BGR) image_show(image=image) elif stFrameInfo.enPixelType == 34603039: data = data.reshape(stFrameInfo.nHeight, stFrameInfo.nWidth, -1) image = cv2.cvtColor(data, cv2.COLOR_YUV2BGR_Y422) image_show(image = image) # 为线程定义一个函数 def work_thread(cam=0, pData=0, nDataSize=0): stOutFrame = MV_FRAME_OUT() memset(byref(stOutFrame), 0, sizeof(stOutFrame)) while True: ret = cam.MV_CC_GetImageBuffer(stOutFrame, 1000) if None != stOutFrame.pBufAddr and 0 == ret and stOutFrame.stFrameInfo.enPixelType == 17301505: print("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nFrameNum)) pData = (c_ubyte * stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight)() cdll.msvcrt.memcpy(byref(pData), stOutFrame.pBufAddr,stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight) data = np.frombuffer(pData, count=int(stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight),dtype=np.uint8) image_control(data=data, stFrameInfo=stOutFrame.stFrameInfo) elif None != stOutFrame.pBufAddr and 0 == ret and stOutFrame.stFrameInfo.enPixelType == 17301514: print("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nFrameNum)) pData = (c_ubyte * stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight)() cdll.msvcrt.memcpy(byref(pData), stOutFrame.pBufAddr,stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight) data = np.frombuffer(pData, count=int(stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight),dtype=np.uint8) image_control(data=data, stFrameInfo=stOutFrame.stFrameInfo) elif None != stOutFrame.pBufAddr and 0 == ret and stOutFrame.stFrameInfo.enPixelType == 35127316: print("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nFrameNum)) pData = (c_ubyte * stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight*3)() cdll.msvcrt.memcpy(byref(pData), stOutFrame.pBufAddr,stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight*3) data = np.frombuffer(pData, count=int(stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight*3),dtype=np.uint8) image_control(data=data, stFrameInfo=stOutFrame.stFrameInfo) elif None != stOutFrame.pBufAddr and 0 == ret and stOutFrame.stFrameInfo.enPixelType == 34603039: print("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nFrameNum)) pData = (c_ubyte * stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight * 2)() cdll.msvcrt.memcpy(byref(pData), stOutFrame.pBufAddr,stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight * 2) data = np.frombuffer(pData, count=int(stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight * 2),dtype=np.uint8) image_control(data=data, stFrameInfo=stOutFrame.stFrameInfo) else: print("no data[0x%x]" % ret) nRet = cam.MV_CC_FreeImageBuffer(stOutFrame) if g_bExit == True: break if __name__ == "__main__": deviceList = MV_CC_DEVICE_INFO_LIST() tlayerType = MV_GIGE_DEVICE | MV_USB_DEVICE # ch:枚举设备 | en:Enum device ret = MvCamera.MV_CC_EnumDevices(tlayerType, deviceList) if ret != 0: print ("enum devices fail! ret[0x%x]" % ret) sys.exit() if deviceList.nDeviceNum == 0: print ("find no device!") sys.exit() print ("Find %d devices!" % deviceList.nDeviceNum) for i in range(0, deviceList.nDeviceNum): mvcc_dev_info = cast(deviceList.pDeviceInfo[i], POINTER(MV_CC_DEVICE_INFO)).contents if mvcc_dev_info.nTLayerType == MV_GIGE_DEVICE: print ("\ngige device: [%d]" % i) strModeName = "" for per in mvcc_dev_info.SpecialInfo.stGigEInfo.chModelName: strModeName = strModeName + chr(per) print ("device model name: %s" % strModeName) nip1 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24) nip2 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16) nip3 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8) nip4 = (mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff) print ("current ip: %d.%d.%d.%d\n" % (nip1, nip2, nip3, nip4)) elif mvcc_dev_info.nTLayerType == MV_USB_DEVICE: print ("\nu3v device: [%d]" % i) strModeName = "" for per in mvcc_dev_info.SpecialInfo.stUsb3VInfo.chModelName: if per == 0: break strModeName = strModeName + chr(per) print ("device model name: %s" % strModeName) strSerialNumber = "" for per in mvcc_dev_info.SpecialInfo.stUsb3VInfo.chSerialNumber: if per == 0: break strSerialNumber = strSerialNumber + chr(per) print ("user serial number: %s" % strSerialNumber) nConnectionNum = input("please input the number of the device to connect:") if int(nConnectionNum) >= deviceList.nDeviceNum: print ("intput error!") sys.exit() # ch:创建相机实例 | en:Creat Camera Object cam = MvCamera() # ch:选择设备并创建句柄 | en:Select device and create handle stDeviceList = cast(deviceList.pDeviceInfo[int(nConnectionNum)], POINTER(MV_CC_DEVICE_INFO)).contents ret = cam.MV_CC_CreateHandle(stDeviceList) if ret != 0: print ("create handle fail! ret[0x%x]" % ret) sys.exit() # ch:打开设备 | en:Open device ret = cam.MV_CC_OpenDevice(MV_ACCESS_Exclusive, 0) if ret != 0: print ("open device fail! ret[0x%x]" % ret) sys.exit() # ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera) if stDeviceList.nTLayerType == MV_GIGE_DEVICE: nPacketSize = cam.MV_CC_GetOptimalPacketSize() if int(nPacketSize) > 0: ret = cam.MV_CC_SetIntValue("GevSCPSPacketSize",nPacketSize) if ret != 0: print ("Warning: Set Packet Size fail! ret[0x%x]" % ret) else: print ("Warning: Get Packet Size fail! ret[0x%x]" % nPacketSize) stBool = c_bool(False) ret =cam.MV_CC_GetBoolValue("AcquisitionFrameRateEnable", stBool) if ret != 0: print ("get AcquisitionFrameRateEnable fail! ret[0x%x]" % ret) sys.exit() # ch:设置触发模式为off | en:Set trigger mode as off ret = cam.MV_CC_SetEnumValue("TriggerMode", MV_TRIGGER_MODE_OFF) if ret != 0: print ("set trigger mode fail! ret[0x%x]" % ret) sys.exit() # ch:开始取流 | en:Start grab image ret = cam.MV_CC_StartGrabbing() if ret != 0: print ("start grabbing fail! ret[0x%x]" % ret) sys.exit() hThreadHandle = threading.Thread(target=work_thread, args=(cam, None, None)) hThreadHandle.start() except: print ("error: unable to start thread") print ("press a key to stop grabbing.") msvcrt.getch() g_bExit = True hThreadHandle.join() # ch:停止取流 | en:Stop grab image ret = cam.MV_CC_StopGrabbing() if ret != 0: print ("stop grabbing fail! ret[0x%x]" % ret) sys.exit() # ch:关闭设备 | Close device ret = cam.MV_CC_CloseDevice() if ret != 0: print ("close deivce fail! ret[0x%x]" % ret) sys.exit() # ch:销毁句柄 | Destroy handle ret = cam.MV_CC_DestroyHandle() if ret != 0: print ("destroy handle fail! ret[0x%x]" % ret) sys.exit() 主动获取图像有两种方式: 方式一:调用 MV_CC_Start Gr abbing_NET() 开始采集,需要自己开启一个buffer,然后在应用层循环调用 MV_CC_GetOneFrameTimeout_NET() 获取指定像素格式的帧数据,获取帧数据时上层应用程序需要根据帧率控制好调用该接口的频率。 方式二:调用 MV_CC_Start Gr abbing_NET(... 三、主动取流( getoneframetimeout )对黑白图像数据解析并用 opencv 显示 1.主动取流( getoneframetimeout )数据获取并解析 mono 格式的图像数据
目前缺芯的大环境也影响到 工业相机 上面了,使用支持国产 海康 机器人的 工业相机 进行 视觉 开发是不错的替代方案。价格交期很是感人呐! 参考文章 python 调用 海康 工业相机 并用opencv显示(整体实现) 博主写的很全面非常好。 Py Qt显示相机图像本文推荐另一种方法“将num py array 先转化为 Pillow i mage 再转化为Pixmap” 并用来显示。 主要步骤: (1)HikRobot 官网下载安装“机器 视觉 工业相机 客户端M VS V3.3.1(Windows)”, 下载链接。 (2)安装后参考官网自.
private void button1_Click(object sender, EventArgs e) bool tag = Hik SDK .NET_DVR_Init(); Hik SDK .LPNET_DVR_DEVICEINFO_V301 dev = new Hik SDK .LPNET_DVR_DEVICEINFO_V301(); user = Hik SDK .NET_DVR_Login_V30("192.168.1.15", 8000, "admin", "12345", out dev); Hik SDK .NET_DVR_CLIENTINFO cl = new Hik SDK .NET_DVR_CLIENTINFO(); cl.hPlayWnd = this.Handle; cl.lChannel = 1; cl.lLinkMode = 0; playHandle = Hik SDK .NET_DVR_RealPlay(user, ref cl); //Hik SDK .NET_DVR_StopRealPlay(playHandle); Camera.Run(); 最后通过Camera.CIMG获取CogI mage 8 Gr ey图像结果(康耐视图像结果) 最后通过Camera.MIMG获取CMvdI mage 图像结果( 海康 读码) public class Camera public static MyCamera.cbOutputEx
weixin_47011227: error: building boost-bind:x64-windows failed with: BUILD_FAILED error: Please ensure you're using the latest port files with `git pull` and `vcpkg update`. Then check for known issues at: https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+boost-bind You can submit a new issue at: https://github.com/microsoft/vcpkg/issues/new?template=report-package-build-failure.md&title=[boost-bind]+Build+error Include '[boost-bind] Build error' in your bug report title, the following version information in your bug description, and attach any relevant failure logs from above. vcpkg-tool version: 2023-03-01-538539c4e364dd6f14f5e36f6704144254845159 vcpkg-scripts version: unknown博主这个问题怎么解决呢