图片黑白转化-python-np.where(binary,255,0)

有时候我们需要对图片进行黑白转话,那么如何做呢,就是将黑色区域变成白色区域,白色区域变成黑色区域。

原图如下:

将白色区域变成黑色区域,将黑色区域变成白色区域。

代码如下:

先将图片二值化:

import cv2
import numpy as np
 
img = 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 np
 
img = 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)*255

FG_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)

效果图:

猜你喜欢

转载自blog.csdn.net/qq_34904125/article/details/123309221