版权声明:转载请注明原作者及出处
import numpy as np
from cv2 import cv2
"""ROI,ROI区域即一张图上你感兴趣的区域,可以用数组切片的方式选出图像的特定区域
对ROI区域的操作,也会反应在原图上"""
#========================方案一==============================
print("--------------------hello python!--------------------")
src = cv2.imread("D:/Picture/wallhaven-2712.jpg")
face = src[50:250,100:300,:] #利用numpy数组访问特定区域
#face表示50~250行,100~300列的像素值(每个像素值都是一个3通道BGR数组)
gray = cv2.cvtColor(face,cv2.COLOR_BGR2GRAY) #转化为单通道灰度图
src[50:250,100:300,0] = gray #将单通道的值赋给三通道BGR的每个通道
src[50:250,100:300,1] = gray
src[50:250,100:300,2] = gray
cv2.imshow("input window",src)
cv2.imshow("face",face)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
from cv2 import cv2
"""ROI,ROI区域即一张图上你感兴趣的区域,可以用数组切片的方式选出图像的特定区域
对ROI区域的操作,也会反应在原图上"""
#=========================方案二===========================
print("--------------------hello python!--------------------")
src = cv2.imread("D:/Picture/wallhaven-2712.jpg")
face = src[50:250,100:300,:] #利用numpy数组访问特定区域
#face表示50~250行,100~300列的像素值(每个像素值都是一个3通道BGR数组)
gray = cv2.cvtColor(face,cv2.COLOR_BGR2GRAY) #转化为单通道灰度图
backface = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
#灰度图回到BGR图在视觉上没有任何区别,但是数据的存储方式从单通道变为三通道
src[50:250,100:300,:] = backface #将原图ROI区域变成灰色
cv2.imshow("input window",src)
cv2.imshow("face",face)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
from cv2 import cv2
"""泛洪填充"""
def fill_color_demo(img):
"""泛洪填充,即制定图中某一像素,以该像素为基准点,设置像素值的上限与下限"""
"""所有处在上下限范围内的像素,都会被填充为指定的新颜色"""
copying = img.copy()
h, w = copying.shape[0:2]
mask = np.zeros([h+2,w+2,1],dtype=np.uint8)
#opencv要求mask数据类型必须是uint8
#调用泛洪填充时,只有mask参数中像素值为0的区域才会被填充
#mask用来规定我们在什么范围内才被允许做填充
#此处mask全部为0,所以整个图像都会被考虑
cv2.floodFill(copying,mask,(30,30),(0,255,255),(10,10,10),(10,10,10),cv2.FLOODFILL_FIXED_RANGE)
#第三个参数为种子像素,也就是填充的起始点(30,30)
#第四参数(0,255,255)表示填充的颜色(这里是黄色)
#第五参数规定像素值范围下限,下限为 种子像素值-(100,100,100)
#第六参数规定像素值范围上限,上限为 种子像素值+(50,50,50)
cv2.imshow("floodfill",copying)
def fill_binary_demo():
"""二值填充,通过限定mask中像素值为0的区域来规定填充区域"""
img = np.zeros([400,400,3],dtype=np.uint8)
img[100:300,100:300,:] = 255
copying = img.copy()
h, w = copying.shape[0:2]
mask = np.ones([h+2,w+2,1],dtype=np.uint8)
#mask初始全部为1
mask[151:251,151:251,:] = 0
#设置允许填充区域(mask中像素值为0的区域才允许被填充)
#此时填充既受到原图影响,又受到mask影响
cv2.floodFill(copying,mask,(200,200),(45,25,255),cv2.FLOODFILL_MASK_ONLY)
#第三个参数为种子像素,也就是填充的起始点(200,200)
#第四参数(0,255,255)表示填充的颜色(这里是黄色)
cv2.imshow("floodfill_bin",copying)
print("--------------------hello python!--------------------")
src = cv2.imread("D:/Picture/wallhaven-2712.jpg")
fill_color_demo(src)
fill_binary_demo()
cv2.waitKey(0)
cv2.destroyAllWindows()