美文网首页
2019-04-08 OpenCV学习

2019-04-08 OpenCV学习

作者: 毛十三_ | 来源:发表于2019-04-10 13:23 被阅读0次

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

相关文章

网友评论

      本文标题:2019-04-08 OpenCV学习

      本文链接:https://www.haomeiwen.com/subject/mctpiqtx.html