由于海康python脚本刚推出不久,自己之前也自学了一年python,看了社区有好些小伙伴卡在python图片的转换问题上,因此自己也研究并测试了下,经过几天的努力终于成功实现
废话不多说,上代码
import sys
sys.argv=['']
from ioHelper import *
import cv2 as cv
import numpy as np
def Process(data) -> int:
moduleVar = IoHelper(data, INIT_MODULE_VAR)
globalVar = IoHelper(data, INIT_GLOBAL_VAR)
localVar = IoHelper(data, INIT_LOCAL_VAR)
try:
imagedata=moduleVar.in0#图像源输入彩色
imagedata_gray=moduleVar.in3#图像源输入黑白
width=moduleVar.in1#图像宽
height=moduleVar.in2#图像高
length=width*height#像素点数
channels=3#通道数
img_np=np.frombuffer(imagedata.buffer,np.uint8)#彩色图片转换成字节流
img_np_gray=np.frombuffer(imagedata_gray.buffer,np.uint8)#灰度图片转换成字节流
#下面这两句是关键后面的轮廓和收缩只是为了看效果
img=np.reshape(img_np,[height, width, channels])#彩色转换需要宽高对调,和原始图像对比发现的
gray=cv.cvtColor(img,cv.COLOR_RGB2GRAY)#灰度处理这颜色需要RGB,和原始图像对比发现的
ret,img_threshold1=cv.threshold(gray,127,255,cv.THRESH_BINARY)#二值化
contours,hierarchy=cv.findContours(img_threshold1,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)#获取灰度的轮廓
img1=img.copy()
res=cv.drawContours(img1,contours,-1,(0,0,255),2)#彩色图片
dst=np.ones((5,5),np.uint8)
erosion=cv.erode(img_threshold1,dst,iterations=1)#收缩
img_test1=imagedata_gray
img_test1.buffer=erosion.tobytes()
moduleVar.out0=img_test1
img_test2=imagedata
img_test2.buffer=res.tobytes()
moduleVar.out1=img_test2
except BaseException as e:
PrintMsg(e)
return 0
代码核心是上面的转换,如果是灰度转黑白,通道数改成1即可
效果图如下