主要从这里学习到:http://www.cdadata.com/17816
图像语义分割结果要二分类或者多分类,会需要做二值化处理。
最开始想法很暴力,直接遍历,一个一个换:
cv_pic = cv2.imread(img, cv2.IMREAD_GRAYSCALE)
for i in range(len(cv_pic)):
for j in range(len(cv_pic[i])):
# print(cv_pic[i][j])
if cv_pic[i][j] > 127.5:
cv_pic[i][j] = 255
elif cv_pic[i][j] < 127.5:
cv_pic[i][j] = 0
cv2.imwrite(cv_path + '/' + imgname, cv_pic)
但是这样做就很慢,毕竟暴力解法不可取~~~所以找找现成的库。
原图类似这样的:
要转换成黑白两色。
先试试用PIL:
I = Image.open(img)
L = I.convert('1')
L.save("242.png")
结果是这样的,不是我们想要的样子。
之后就用Opencv试试:
cv_pic = cv2.imread(img, cv2.IMREAD_GRAYSCALE)
binary, cv_save = cv2.threshold(cv_pic,127,255,cv2.THRESH_BINARY)
print(cv_save)
# cv2.imshow("haha", cv_save)
# cv2.show()
# exit(1)
cv2.imwrite(imgname, cv_save)
这样的结果才是我们想要的。
如果要黑白色对换,只需将cv2.THRESH_BINARY换成cv2.THRESH_BINARY_INV,结果如图:
就这样~
吐嘲下上传图片功能,有时只能保存了再打开才能上传。