发现:
目前来说,opencv,numpy,PIL之间的图像数据可以不经过转换直接使用(需要注意的是,opencv的图像一般都是BGR,其他都是RGB)
def get_average(records):
"""
平均值
"""
return sum(records) / len(records)
def get_variance(records):
"""
方差 反映一个数据集的离散程度
"""
average = get_average(records)
return sum([(x - average) ** 2 for x in records]) / len(records)
def puttext(x, y, img):
text = '(' + str(x) + ',' + str(y) + ')'
org = (x, y) # 文字左下角坐标
fontFace = cv2.FONT_HERSHEY_COMPLEX
fontScale = 0.3
fontcolor = (0, 255, 255) # BGR
thickness = 1
lineType = 8
cv2.putText(img, text, org, fontFace, fontScale, fontcolor, thickness, lineType)
return 0
def find_draw_contours(final_image_cv, num):
# final_image_cv 是mat格式的opencv图像
# num 是决定画的边缘线的颜色,1是白,否则是黑色
if final_image_cv.shape[2] == 3:
gray = cv2.cvtColor(final_image_cv, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)
else:
ret, binary = cv2.threshold(final_image_cv, 0, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
if num:
color_ = [255, 255, 255]
else:
color_ = [0, 0, 0]
cv2.drawContours(final_image_cv, contours, -1, color_, 3)
return final_image_cv
Y = Y.astype(np.float64)
思路1,使用PIL的Image.blend:
def blend_1(img1, img2):
'''
Function:
利用PIL,将img1和img2进行重叠合并
Para:
img1是原始图像
img2是预测后经过处理的最终预测图像
'''
s_time = time.time()
im1 = Image.fromarray(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)) # opencv转PIL
im2 = Image.fromarray(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)) # opencv转PIL
im = Image.blend(im1, im2, 0.5) # 重叠
img = cv2.cvtColor(numpy.asarray(im), cv2.COLOR_RGB2BGR) # PIL转opencv
u_time = time.time()
img_time = u_time - s_time
print("time: {} ".format(img_time))
return img # 返回合并opencv图像
思路2,使用cv2.addWeight(good):
def blend_2(img1, img2):
'''
Function:
利用PIL,将img1和img2进行重叠合并
Para:
img1是原始图像
img2是预测后经过处理的最终预测图像
'''
s_time = time.time()
dst = cv2.addWeighted(img1,0.5,img2,0.5,0)
u_time = time.time()
img_time = u_time - s_time
print("time: {} ".format(img_time))
return dst # 返回合并opencv图