def Work_thread(self):
# ch:创建显示的窗口 | en:Create the window for display
cv2.namedWindow(str(self.n_win_gui_id),0)
cv2.resizeWindow(str(self.n_win_gui_id), 500, 500)
stFrameInfo = MV_FRAME_OUT_INFO_EX()
img_buff = None
while True:
ret = self.obj_cam.MV_CC_GetOneFrameTimeout(byref(self.buf_cache), self.n_payload_size, stFrameInfo, 1000)
if ret == 0:
#获取到图像的时间开始节点获取到图像的时间开始节点
self.st_frame_info = stFrameInfo
print ("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (self.st_frame_info.nWidth, self.st_frame_info.nHeight, self.st_frame_info.nFrameNum))
self.n_save_image_size = self.st_frame_info.nWidth * self.st_frame_info.nHeight * 3 + 2048
if img_buff is None:
img_buff = (c_ubyte * self.n_save_image_size)()
if True == self.b_save_jpg:
self.Save_jpg() #ch:保存Jpg图片 | en:Save Jpg
if self.buf_save_image is None:
self.buf_save_image = (c_ubyte * self.n_save_image_size)()
stParam = MV_SAVE_IMAGE_PARAM_EX()
stParam.enImageType = MV_Image_Bmp; # ch:需要保存的图像类型 | en:Image format to save
stParam.enPixelType = self.st_frame_info.enPixelType # ch:相机对应的像素格式 | en:Camera pixel type
stParam.nWidth = self.st_frame_info.nWidth # ch:相机对应的宽 | en:Width
stParam.nHeight = self.st_frame_info.nHeight # ch:相机对应的高 | en:Height
stParam.nDataLen = self.st_frame_info.nFrameLen
stParam.pData = cast(self.buf_cache, POINTER(c_ubyte))
stParam.pImageBuffer = cast(byref(self.buf_save_image), POINTER(c_ubyte))
stParam.nBufferSize = self.n_save_image_size # ch:存储节点的大小 | en:Buffer node size
stParam.nJpgQuality = 80; # ch:jpg编码,仅在保存Jpg图像时有效。保存BMP时SDK内忽略该参数
if True == self.b_save_bmp:
self.Save_Bmp() #ch:保存Bmp图片 | en:Save Bmp
else:
continue
#转换像素结构体赋值
stConvertParam = MV_CC_PIXEL_CONVERT_PARAM()
memset(byref(stConvertParam), 0, sizeof(stConvertParam))
stConvertParam.nWidth = self.st_frame_info.nWidth
stConvertParam.nHeight = self.st_frame_info.nHeight
stConvertParam.pSrcData = self.buf_cache
stConvertParam.nSrcDataLen = self.st_frame_info.nFrameLen
stConvertParam.enSrcPixelType = self.st_frame_info.enPixelType
# Mono8直接显示
if PixelType_Gvsp_Mono8 == self.st_frame_info.enPixelType:
numArray = CameraOperation.Mono_numpy(self,self.buf_cache,self.st_frame_info.nWidth,self.st_frame_info.nHeight)
# RGB直接显示
elif PixelType_Gvsp_RGB8_Packed == self.st_frame_info.enPixelType:
numArray = CameraOperation.Color_numpy(self,self.buf_cache,self.st_frame_info.nWidth,self.st_frame_info.nHeight)
#如果是黑白且非Mono8则转为Mono8
elif True == self.Is_mono_data(self.st_frame_info.enPixelType):
nConvertSize = self.st_frame_info.nWidth * self.st_frame_info.nHeight
stConvertParam.enDstPixelType = PixelType_Gvsp_Mono8
stConvertParam.pDstBuffer = (c_ubyte * nConvertSize)()
stConvertParam.nDstBufferSize = nConvertSize
ret = self.obj_cam.MV_CC_ConvertPixelType(stConvertParam)
if ret != 0:
tkinter.messagebox.showerror('show error','convert pixel fail! ret = '+self.To_hex_str(ret))
continue
cdll.msvcrt.memcpy(byref(img_buff), stConvertParam.pDstBuffer, nConvertSize)
numArray = CameraOperation.Mono_numpy(self,img_buff,self.st_frame_info.nWidth,self.st_frame_info.nHeight)
#如果是彩色且非RGB则转为RGB后显示
elif True == self.Is_color_data(self.st_frame_info.enPixelType):
nConvertSize = self.st_frame_info.nWidth * self.st_frame_info.nHeight * 3
stConvertParam.enDstPixelType = PixelType_Gvsp_RGB8_Packed
stConvertParam.pDstBuffer = (c_ubyte * nConvertSize)()
stConvertParam.nDstBufferSize = nConvertSize
ret = self.obj_cam.MV_CC_ConvertPixelType(stConvertParam)
if ret != 0:
tkinter.messagebox.showerror('show error','convert pixel fail! ret = '+self.To_hex_str(ret))
continue
cdll.msvcrt.memcpy(byref(img_buff), stConvertParam.pDstBuffer, nConvertSize)
numArray = CameraOperation.Color_numpy(self,img_buff,self.st_frame_info.nWidth,self.st_frame_info.nHeight)
cv2.resizeWindow(str(self.n_win_gui_id), 500, 500)
cv2.imshow(str(self.n_win_gui_id),numArray)
cv2.waitKey(1)
if self.b_exit == True:
cv2.destroyAllWindows()
if img_buff is not None:
del img_buff
if self.buf_cache is not None:
del buf_cache
break
def Work_thread(self): # ch:创建显示的窗口 | en:Create the window for display cv2.namedWindow(str(self.n_win_gui_id),0) cv2.resizeWindow(str(self.n_win_gui_id), 500, 500) stFrameInfo = MV_FRAME_OUT_INFO_EX() img_buff = N.
opencv
3是开源的机器学习平台,以跨平台、
高效率
为特点,为
计算机视觉
处理
提供了强大的支持,与多个编程工具连接,可以方便开发人员使用其图片操作功能,编辑代码更有效率。
OpenCV
是开源的,并根据BSD 3条款许可发布。它是免费的商业用途。
C ++,
python
和java接口支持Linux,MacOS,Windows,iOS和Android。
OpenCV
是一个高度优化的库,专注于实时应用程序。
应用领域:
1、人机互动
2、物体识别
3、运动分析
4、机器视觉
5、结构分析
6、汽车安全驾驶
7、
图像
分割
8、人脸识别
9、动作识别
10、运动跟踪
11、机器人
sanpera是用于
Python
的映像库,旨在通过毫不奇怪和一致的API公开很多功能。 目标是为
图像
处理
做请求对HTTP所做的事情。
这是一项艰巨的工作,但确实可以做一些有用的事情。 如果它对您有用,请随时旋转一下,并为丢失或损坏的任何事物提交票证!
GitHub页面
sanpera几乎全部用Cython编写,因为嘿,为什么不呢。
它由提供支持,但是它不是一个简单的包装器;它只是一个简单的包装器。 ImageMagick仅仅是实现细节。
公开ImageMagick可以做的所有事情,并尽可能地平滑其特质。
具有简单明显的行为。
合理地快速紧凑。
使用C
Python
和PyPy。
互操作性(如果有用):numpy,Cairo等
表现得像ImageMagick。
使用Iron
Python
或Jython。
与C一样快或内存效率高。