cv.bitwise_not(image)#像素取反
import cv2 as cv
import numpy as np
def vedio_demo():
capture=cv.VideoCapture(0)
while(True):
ret,frame=capture.read()
frame=cv.flip(frame,1)#反转
cv.imshow("video",frame)
c=cv.waitKey(50)
if c==27 :
break
def get_image_info(image):
print(type(image))
print(image.shape)
print(image.size)
print(image.dtype)
pixel_data=np.array(image)
print(pixel_data)
def access_pexel(image): #像素取反
print(image.shape)
height=image.shape[0]
width=image.shape[1]
channel=image.shape[2]
print("width: %s,height: %s,channel: %s"%(width,height,channel))
for row in range(height):
for col in range(width):
for c in range(channel):
pv=image[row,col,c]
image[row,col,c]=255-pv
cv.imshow("pexel_demol:",image)
def inverse(image):
dst=cv.bitwise_not(image)#像素取反
cv.imshow("inverse demo" ,dst)
def create_image(image):
# image=np.zeros([400,400,3],np.uint8)
# image[:,:,0]=np.ones([400,400])*255 #B
# image[:, :,1] = np.ones([400, 400]) * 255 # G
#image=np.zeros([400,400,1],np.uint8)#灰度图
# image[:, :, 0] = np.ones([400, 400]) * 127
image = np.ones([400, 400, 1], np.uint8)
image=image*127
m=np.array([[2,3,4],[3,4,5],[4,5,6]],np.int32)
m.fill(9)
print(m)
cv.imshow("create_image:", image)
cv.imwrite("C:\\Users\\22852\\Desktop\\opencv\\result\\create_image.jpg",image)
dst=cv.add(m1,m2)#加
dst=cv.subtract(src2,src1)#减
dst=cv.multiply(src1,src2)#乘
dst=cv.divide(src2,src1)#除
M1,dev1=cv.meanStdDev(m1)#均值和标准差
dst=cv.bitwise_and(m1,m2) #与
dst=cv.bitwise_or(src1,src2)#或
dst=cv.bitwise_not(src1,src2)#非
def contract_brightness_demo(image,c,b):#c:对比度,b:亮度
h,w,ch=image.shape
blank=np.zeros([h,w,ch],image.dtype)
dst=cv.addWeighted(image,c,blank,1-c,b)#
cv.imshow('contract_brightness_demo',dst)
def color_space_demo(image):
gray=cv.cvtColor(image,cv.COLOR_RGB2GRAY)
cv.imshow("gray ",gray)
hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)#
cv.imshow("hsv",hsv)
yuv=cv.cvtColor(image,cv.COLOR_BGR2YUV)
cv.imshow("yuv",yuv)
ycrcb=cv.cvtColor(image,cv.COLOR_BGR2YCrCb)
cv.imshow("ycrcb",ycrcb)
lab=cv.cvtColor(image,cv.COLOR_BGR2LAB)#no
cv.imshow("lab",lab)
h,s,v = cv.split(hsv)
cv.imshow("h", h)
cv.imshow("s", s)
cv.imshow("v", v)
def colo_extract(image):
hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)
# h,s,v=cv.split(hsv)
lower_hsv = np.array([11, 43,46])
upper_hsv = np.array([25, 255, 255])
mask = cv.inRange(hsv, lower_hsv, upper_hsv)
dst = cv.bitwise_and(image,image,mask=mask)
cv.imshow("img",image )
cv.imshow("hsv", hsv)
cv.imshow("mask", mask)
cv.imshow("dst", dst)
HSV颜色对照表
如下图,直接操作效果不好,可以通过后续学的腐蚀和膨胀进行优化哦
图像ROI(Region Of Interest),即感兴趣的区域,通过numpy的切片操作实现。
这个区域是人为设置的,想提取哪就对哪切片。
def ROI(image): #region of interest
face = image[50:100, 100:150]
cv.imshow("face", face)
gray = cv.cvtColor(face, cv.COLOR_BGR2GRAY)
backface = cv.cvtColor(gray, cv.COLOR_GRAY2BGR)
image[50:100, 100:150] = backface
cv.imshow("face image", image)
用给定的颜色填充连通的区域
def fill_color_demo(image):#泛洪填充
copyImg=image.copy()
h,w=image.shape[:2]
mask=np.zeros([h+2,w+2],np.uint8)#必须比image宽2个像素、高2个像素
cv.floodFill(copyImg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
cv.imshow('fill_color_demo',copyImg)
'''
mask 【输入/输出】 操作掩码,必须为单通道、8bit,且比image宽2个像素、高2个像素。使用前必须先初始化。Flood-filling无法跨越mask中的非0像素。
例如,一个边缘检测的结果可以作为mask来阻止边缘填充。在输出中,mask中与image中填充像素对应的像素点被设置为1,或者flags标志位中设置的值(详见flags标志位的解释)。此外,该函数还用1填充了mask的边缘来简化内部处理。因此,可以在多个调用中使用同一mask,以确保填充区域不会重叠。
seedPoint 起始像素点。newVal 重绘像素区域的新的填充值(颜色)。
newVal 重绘区域的新值(黄色)。
loDiff 当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大下行差异值。
upDiff 当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大上行差异值。
flags flags标志位是一个32bit的int类型数据,其由3部分组成:
0-7bit表示邻接性(4邻接、8邻接);
8-15bit表示mask的填充颜色;
16-31bit表示填充模式
(详见填充模式解释)
'''
def fill_binary_demo():
image=np.zeros([400,400,3],np.uint8) #黑色
image[100:300,100:300,:]=255 #填充白色
cv.imshow('fill_binary', image)
mask=np.ones([402,402,1],np.uint8)
mask[101:301,101:301]=0 #白色变成红色
cv.floodFill(image,mask,(200,200),(0,0,255),cv.FLOODFILL_MASK_ONLY)
cv.imshow('fill_binary_demo', image)
import cv2 as cv
import numpy as np
def blur_demo(image):#均值模糊,去随机噪点
dst=cv.blur(image,(5,5))
cv.imshow("blur_demo",dst)
def median_blur_demo(image):#中值模糊,去椒盐噪点
dst=cv.medianBlur(image,5)
cv.imshow("median_blur_demo",dst)
def custum_blur_demo(image):#自己定义kernel大小
kernel=np.ones([5,5],np.float32)/25 #和均值模糊效果一样
# kernel=np.array([[1,-1,0],[5,-3,-1],[1,0,-1]],np.float32)#锐化,奇数,和为0:边界或1增强
dst=cv.filter2D(image,-1,kernel)
cv.imshow('custum_blur_demo',dst)
def clamp(s):
if s>255:
return 255
if s<0:
return 0
else:
return s
def gaussian_nosian(image):
h,w,c=image.shape
for row in range(h):
for col in range(w):
s=np.random.normal(0,20,3)
b=image[row,col,0]#blue
g=image[row,col,1]#green
r=image[row,col,2]#red
image[row, col, 0] =clamp(b+s[0])
image[row, col, 1] = clamp(g+s[1])
image[row, col, 2] = clamp(r+s[2])
cv.imshow("gaussian nosian:", image)
src=cv.imread('C:\\Users\\22852\\Desktop\\opencv\\data\\m.jpg')
cv.imshow("input image:",src)
gaussian_nosian(src)
blur_demo(src)
median_blur_demo(src)
custum_blur_demo(src)
src=cv.GaussianBlur(src,(3,3),0) #高斯模糊
cv.imshow('GaussianBlur', src)
cv.waitKey(0)
cv.destroyAllWindows()