06像素运算
运算要求:;两个图片大小,类型一致才能进行运算。
import cv2 as cv
def add_demo(m1,m2):
dst = cv.add(m1,m2)
cv.imshow("add_demo",dst)
def subtract_demo(m1,m2):
dst = cv.subtract(m1,m2)
cv.imshow("subtract_demo",dst)
print("=====Hello Python=====")
src1 = cv.imread("opencv_sources/LinuxLogo.jpg")
src2 = cv.imread("opencv_sources/WindowsLogo.jpg")
cv.namedWindow("image1",cv.WINDOW_AUTOSIZE)
cv.imshow("image1",src1)
cv.imshow("image2",src2)
add_demo(src1,src2)
subtract_demo(src1,src2)
cv.waitKey(0)
cv.destroyAllWindows()


计算图像的均值和标准差:可以看出图像是否无效(都是0则无效)
import cv2 as cv
def others(m1,m2):
M1,dev1 = cv.meanStdDev(m1)
M2,dev2 = cv.meanStdDev(m2)
print(M1)
print(M2)
print(dev1)
print(dev2)
07像素逻辑运算
def logistic_demo(m1, m2):
dst1 = cv.bitwise_and(m1,m2)
dst2 = cv.bitwise_or(m1,m2)
cv.imshow("logistic_demo1",dst1)
cv.imshow("logistic_demo2",dst2)
dst3 = cv.bitwise_not(m1) #颜色取反

05代码添加语句:dst = cv.bitwise_and(frame,frame,mask = mask)*
import cv2 as cv
import numpy as np
def extract_object_demo():
capture = cv.VideoCapture("C:/Users/Administrator/Desktop/green.mp4")
while(True):
ret,frame = capture.read()
if ret == False:
break
hsv = cv.cvtColor(frame , cv.COLOR_BGR2HSV)
lower_hsv = np.array([35,43,46]) #通过读表可知
upper_hsv = np.array([77,255,255]) #通过读表可知
mask = cv.inRange(hsv,lowerb = lower_hsv,upperb = upper_hsv)
dst = cv.bitwise_and(frame,frame,mask = mask)
cv.imshow("video", frame)
cv.imshow("mask",dst)
c = cv.waitKey(1)
if c==27:
break
print("=====Hello Python=====")
extract_object_demo()
cv.waitKey(0)
cv.destroyAllWindows()

提升亮度和对比度
import cv2 as cv
import numpy as np
def contrast_brightness_demo(image,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("com_bri_demo",dst)
print("=====Hello Python=====")
src3 = cv.imread("opencv_sources/lena.jpg")
cv.imshow("image3",src3)
contrast_brightness_demo(src3,1.5,20)
cv.waitKey(0)
cv.destroyAllWindows()

08ROI与泛洪填充
import cv2 as cv
print("=====Hello Python=====")
src = cv.imread("opencv_sources/lena.jpg")
cv.namedWindow("image",cv.WINDOW_AUTOSIZE)
cv.imshow("image",src)
face = src[200:400,200:400]
cv.imshow("face",face)
cv.waitKey(0)
cv.destroyAllWindows()
ROI:region of interest图片上感兴趣的区域。

import cv2 as cv
print("=====Hello Python=====")
src = cv.imread("opencv_sources/lena.jpg")
cv.namedWindow("image",cv.WINDOW_AUTOSIZE)
cv.imshow("image",src)
face = src[200:400,200:400]
gray = cv.cvtColor(face,cv.COLOR_BGR2GRAY)
backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR)
src[200:400,200:400] = backface
cv.imshow("face",src)
cv.waitKey(0)
cv.destroyAllWindows()

泛洪填充
如何填充一个对象内部区域:
FLOODFILL_FIXED_RANGE:改变图像,泛洪填充
FLOODFILL_MASK_ONLY:不改变图像,只填充遮罩层,忽略新的颜色值参数
import cv2 as cv
import numpy as np
def fill_color_demo(image):
copyImage = image.copy()
h,w = image.shape[ :2]
mask = np.zeros([h+2,w+2],np.uint8) #固定的
cv.floodFill(copyImage,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)#第三个参数是填充的起始位;第四个参数是填充的颜色:黄色;找到像素点的范围;最后一个参数是填充方法的选择
cv.imshow("filled_color",copyImage)
def fill_binary(): #二值图的填充
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),(100,2,255),cv.FLOODFILL_MASK_ONLY)
cv.imshow("filled_binary", image)
mask = np.ones([402,402,1],np.uint8)
print("=====Hello Python=====")
src = cv.imread("opencv_sources/lena.jpg")
fill_color_demo(src)
fill_binary()
cv.waitKey(0)
cv.destroyAllWindows()

09模糊操作
均值模糊、中值模糊、自定义模糊
均值模糊:去噪声
中值模糊:去椒盐噪声
import cv2 as cv
def blur_demo(image): #均值模糊
dst = cv.blur(image,(15,3)) #卷积盒大小为15行3列
cv.imshow("blur_demo",dst)
def median_blur_demo(image): #中值模糊,椒盐去噪
dst = cv.medianBlur(image,5)
cv.imshow("median_blur",dst)
print("=====Hello Python=====")
src1 = cv.imread("opencv_sources/lenanoise.jpg")
cv.namedWindow("image1",cv.WINDOW_AUTOSIZE)
cv.imshow("image1",src1)
blur_demo(src1)
median_blur_demo(src1)
cv.waitKey(0)
cv.destroyAllWindows()

自定义模糊:
import cv2 as cv
import numpy as np
def customer_blur_demo(image): #自定义模糊
kernel = np.ones([5,5],np.float32)/25 #算子
dst = cv.filter2D(image,-1,kernel = kernel)
cv.imshow("ct_bl_demo",dst)
print("=====Hello Python=====")
src1 = cv.imread("opencv_sources/dog.jpg")
cv.namedWindow("image1",cv.WINDOW_AUTOSIZE)
cv.imshow("image1",src1)
customer_blur_demo(src1)
cv.waitKey(0)
cv.destroyAllWindows()

锐化:
import cv2 as cv
import numpy as np
def customer_blur_demo(image): #自定义模糊
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32) #锐化算子,算子自定义取值:奇数,总和为1或0
dst = cv.filter2D(image,-1,kernel = kernel)
cv.imshow("ct_bl_demo",dst)
print("=====Hello Python=====")
src1 = cv.imread("opencv_sources/dog.jpg")
cv.namedWindow("image1",cv.WINDOW_AUTOSIZE)
cv.imshow("image1",src1)
customer_blur_demo(src1)
cv.waitKey(0)
cv.destroyAllWindows()

10高斯模糊
import cv2 as cv
import numpy as np
def clamp(pv):
if pv>255:
return 255
if pv<0:
return 0
else:
return pv
def gaussian_noise(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_demo",image)
print("=====Hello Python=====")
src1 = cv.imread("opencv_sources/dog.jpg")
cv.namedWindow("image1",cv.WINDOW_AUTOSIZE)
cv.imshow("image1",src1)
gaussian_noise(src1)
cv.waitKey(0)
cv.destroyAllWindows()

高斯模糊API
import cv2 as cv
print("=====Hello Python=====")
src1 = cv.imread("opencv_sources/dog.jpg")
cv.namedWindow("image1",cv.WINDOW_AUTOSIZE)
cv.imshow("image1",src1)
dst = cv.GaussianBlur(src1,(0,0),15)
cv.imshow("gauuss_blur",dst)
cv.waitKey(0)
cv.destroyAllWindows()

网友评论