有时候我们需要对图片进行黑白转话,那么如何做呢,就是将黑色区域变成白色区域,白色区域变成黑色区域。
原图如下:
将白色区域变成黑色区域,将黑色区域变成白色区域。
代码如下:
先将图片二值化:
import cv2
import numpy as npimg = cv2.imread("img.jpg") #读取图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #变为灰度图
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) ## 阈值分割得到二值化图片
cv2.namedWindow('binary', cv2.WINDOW_AUTOSIZE)
cv2.imshow('binary', binary)
cv2.waitKey(0)
二值化的图片再对数值继续判断,如果是255则变为0,是0则变为255。
import cv2
import numpy as npimg = cv2.imread("img.jpg") #读取图片
w,h = img.shape[:-1] #获取长宽
print(w,h)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #变为灰度图
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) ## 阈值分割得到二值化图片
# cv2.namedWindow('binary', cv2.WINDOW_AUTOSIZE)
# cv2.imshow('binary', binary)
# cv2.waitKey(0)binary = binary >2 #得到图片通道的逻辑值'''
[[False False False ... False False False][False False False ... False False False][False False False ... False False False]...[False False False ... False False False][False False False ... False False False][False False False ... False False False]]
'''
# 创建全为0的背景图
fg_image = np.zeros(img.shape[:-1], dtype=np.uint8)
# 创建全为255的背景图
fg_image2 = np.ones(img.shape[:-1], dtype=np.uint8)*255FG_img = np.where(binary,fg_image,fg_image2) #参数1为Ture返回参数2,否则参数3
print(FG_img)
cv2.namedWindow('FG_img', cv2.WINDOW_AUTOSIZE)
cv2.imshow('FG_img', FG_img)
cv2.waitKey(0)
效果图: