• python-opencv的用法


    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    
    # 接收两个参数,一个是文件名,一个值,如果值为1,接收的是彩色图片,如果值为零,接受的是灰度图片。会有一个返回值,表示返回的图片内容
    img = cv2.imread('mashiro.jpg',1)
    
    # 接收两个参数,一个是窗体名称,另一个是要显示的内容
    cv2.imshow('mashiro',img)
    
    # 将程序暂停,只有这样,才能看到图片,否则图片会一闪而过因为程序结束了,如果time.sleep()的话,会卡住
    cv2.waitKey(0)
    复制代码

     

     

     

    2. 图片写入

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    img = cv2.imread('mashiro.jpg',1)
    cv2.imwrite('mashiro1.jpg',img)
    复制代码

     3.不同图片质量保存

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    img = cv2.imread('mashiro.jpg',1)
    cv2.imwrite('mashiro1.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,0])
    cv2.imwrite('mashiro2.png',img,[cv2.IMWRITE_PNG_COMPRESSION,0])
    
    # jpg属于有损压缩,是以图片的清晰度为代价的,数字越小,压缩比越高,图片质量损失越严重
    # png属于无损压缩,数字0-9,数字越低,压缩比越低
    复制代码

     4.像素操作基础

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    
    img = cv2.imread('mashiro.jpg',1)
    (a,b,c) = img[500,500]
    print(a,b,c)
    
    for i in range(1,100):
        img[i,i] = (255,0,0)
    
    cv2.imshow('mashiro',img)
    cv2.waitKey(0)
    复制代码

    5.图片缩放

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    
    img = cv2.imread('mashiro.jpg',1)
    cv2.imshow('mashiro',img)
    imginfo = img.shape
    height = imginfo[0]
    width = imginfo[1]
    mode = imginfo[2]
    print(imginfo)
    dstHeight = int(height*0.5)
    dstWidth = int(width*0.5)
    
    dst = cv2.resize(img,(dstWidth,dstHeight))
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    6.图片缩放(源码实现)

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    
    height = imgInfo[0]
    width = imgInfo[1]
    
    dstHeight = int(height/2)
    dstWidth = int(width/2)
    
    dstImage = np.zeros((dstHeight,dstWidth,3),np.uint8)
    
    
    for i in range(0,dstHeight):
        for j in range(0,dstWidth):
            iNew = int(i*(height*1.0/dstHeight))
            jNew = int(j*(width*1.0/dstWidth))
            dstImage[i,j] = img[iNew,jNew]
    
    cv2.imshow('mashiro',dstImage)
    cv2.waitKey(0)
    复制代码

    7.图片剪切

     

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    dst = img[10:600,10:400]
    cv2.imshow('mashiro',dst)
    cv2.waitKey(0)
    复制代码

    8.图片移位

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2,numpy as np
    img = cv2.imread('mashiro.jpg',1)
    cv2.imshow('mashiro',img)
    
    
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    
    matshift = np.float32([[1,0,100],[0,1,200]])
    dst = cv2.warpAffine(img,matshift,(height,width))
    cv2.imshow('mashiro1',dst)
    
    cv2.waitKey(0)
    复制代码

    9.图片移位(源码实现)

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    cv2.imshow('mashiro',img)
    dst = np.ones(imgInfo,np.uint8)
    
    height = imgInfo[0]
    width = imgInfo[1]
    
    for i in range(0,height):
        for j in range(0,width-300):
            dst[i,j] = img[i,j]
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

     

    10.图片镜像

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    cv2.imshow('mashiro',img)
    dst = np.ones(imgInfo,np.uint8)
    height = imgInfo[0]
    width = imgInfo[1]
    for i in range(0,height):
        for j in range(0,width):
            dst[i,j] = img[height-1-i,j]
    
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    11.图片仿射变换

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    cv2.imshow('mashiro',img)
    
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    matSrc = np.float32([[0,0],[0,height-1],[width-1,0]])
    matDst = np.float32([[50,50],[300,height-200],[width-300,100]])
    
    matAffine = cv2.getAffineTransform(matSrc,matDst)
    dst = cv2.warpAffine(img,matAffine,(width,height))
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    12.图片旋转

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    cv2.imshow('mashiro',img)
    height = imgInfo[0]
    width = imgInfo[1]
    
    matRotate = cv2.getRotationMatrix2D((width*0.5,height*0.5),45,0.5)
    dst = cv2.warpAffine(img,matRotate,(width,height))
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    13.闲的蛋疼(批量将图片进行上述操作)

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import glob
    import numpy as np
    
    all_jpg = glob.glob(r'C:UsersAdministratorDesktopsatori*.jpg')
    for count,jpg in enumerate(all_jpg):
        img = cv2.imread(jpg,1)
        imgInfo = img.shape
        height = imgInfo[0]
        width = imgInfo[1]
        dst = cv2.resize(img,(int(width/2),int(height/2)))
        cv2.imwrite(rf'C:UsersAdministratorDesktopsatoriscale{count}.jpg',dst,[cv2.IMWRITE_JPEG_QUALITY,100])
    
    cv2.waitKey(0)
    
    #######################################
    
    for count,jpg in enumerate(all_jpg):
        img = cv2.imread(jpg,1)
        imgInfo = img.shape
        height = imgInfo[0]
        width = imgInfo[1]
        matshift = np.float32([[1,0,100],[0,1,50]])
        dst = cv2.warpAffine(img,matshift,(width,height))
        cv2.imwrite(rf'C:UsersAdministratorDesktopsatori	ranslation{count}.jpg',dst)
    cv2.waitKey(0)
    
    ############################
    for count,jpg in enumerate(all_jpg):
        img = cv2.imread(jpg,1)
        imgInfo = img.shape
        height = imgInfo[0]
        width = imgInfo[1]
        dst = np.zeros(imgInfo,np.uint8)
        for i in range(0,height):
            for j in range(0,width):
                dst[i,j] = img[height-1-i,j]
    
        cv2.imwrite(rf'C:UsersAdministratorDesktopsatoriflip{count}.jpg',dst)
    
    #######################
    for count,jpg in enumerate(all_jpg):
        img = cv2.imread(jpg,1)
        imgInfo = img.shape
        height = imgInfo[0]
        width = imgInfo[1]
        matsrc = np.float32([[0,0],[0,height-1],[width-1,0]])
        matdst = np.float32([[50,50],[int(width/2),int(height/2)],[width-100,height-50]])
        matAffine = cv2.getAffineTransform(matsrc,matdst)
        dst = cv2.warpAffine(img,matAffine,(width,height))
        cv2.imwrite(rf'C:UsersAdministratorDesktopsatorishear{count}.jpg',dst)
    
    ########################
    for count,jpg in enumerate(all_jpg):
        img = cv2.imread(jpg,1)
        imgInfo = img.shape
        height = imgInfo[0]
        width = imgInfo[1]
        matRotate = cv2.getRotationMatrix2D((width*0.5,height*0.5),60,0.5)
        dst = cv2.warpAffine(img,matRotate,(width,height))
        cv2.imwrite(rf'C:UsersAdministratorDesktopsatori
    otation{count}.jpg',dst)
    复制代码

     14.灰度处理

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2,numpy as np
    
    img = cv2.imread('mashiro.jpg',0)
    cv2.imshow('mashiro',img)
    
    
    img = cv2.imread('b.png',1)
    dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    cv2.imshow('mmp',dst)
    cv2.waitKey(0)
    
    img  =cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    dst = np.zeros((height,width,3),np.uint8)
    
    for i in range(0,height):
        for j in range(0,width):
            b,g,r = img[i,j]
            gray = (int(b)+int(g)+int(r))/3
            dst[i,j] = [np.uint8(gray),np.uint8(gray),np.uint8(gray)]
    
    cv2.imshow('mmp',dst)
    cv2.waitKey(0)
    
    img  =cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    dst = np.zeros((height,width,3),np.uint8)
    
    for i in range(0,height):
        for j in range(0,width):
            b,g,r = img[i,j]
            b = int(b)
            g = int(g)
            r = int(r)
            gray = r*0.9+b*0.87+r*0.4
            dst[i,j] = [np.uint8(gray),np.uint8(gray),np.uint8(gray)]
    
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    15.颜色反转

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import numpy as np
    import cv2
    
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    dst = np.zeros((height,width,1),np.uint8)
    
    for i in range(0,height):
        for j in range(0,width):
            dst[i,j] = 255 - gray[i,j]
    
    cv2.imshow('mashiro',gray)
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    
    # img = cv2.imread('mashiro.jpg',1)
    # imgInfo = img.shape
    # height = imgInfo[0]
    # width = imgInfo[1]
    # #gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #
    # dst = np.zeros((height,width,3),np.uint8)
    #
    # for i in range(0,height):
    #     for j in range(0,width):
    #         b,g,r = img[i,j]
    #         dst[i,j] = 255-b,255-g,255-r
    #
    # cv2.imshow('mashiro',img)
    # cv2.imshow('mashiro1',dst)
    # cv2.waitKey(0)
    复制代码

     

     

    16.马赛克

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    
    for m in range(200,400):
        for n in range(100,200):
            if m%10==0 and n%10==0:
                for i in range(0,10):
                    for j in range(0,10):
                        b,g,r = img[m,n]
                        img[i+m,j+n] = b,g,r
    
    cv2.imshow('mashiro',img)
    cv2.waitKey(0)
    复制代码

    17.毛玻璃

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import numpy as np
    import cv2,random
    
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    
    dst = np.zeros((height,width,3),np.uint8)
    mm = 8
    for m in range(0,height-mm):
        for n in range(0,width-mm):
            index = int(random.random()*8)
            b,g,r = img[m+index,n+index]
            dst[m,n] = b,g,r
    
    cv2.imshow('mashiro',dst)
    cv2.waitKey(0)
    复制代码

    18.真白18岁生日快乐

    19.图片融合

    复制代码
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    img1 = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    roiH = int(height/2)
    roiW = int(width/2)
    imgROI = img[0:roiH,0:roiW]
    img1ROI = img[0:roiH,0:roiW]
    dst = np.zeros((roiH,roiW,3),np.uint8)
    dst = cv2.addWeighted(imgROI,0.5,img1ROI,0.5,0)
    cv2.imshow('mashiro',dst)
    cv2.waitKey(0)
    #  貌似程序有问题
    复制代码

    20.边缘检测

    复制代码
    import cv2
    import numpy as np
    import random
    # 所有边缘检测都是基于灰度处理的,因此先要转换成灰度图片
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    cv2.imshow('mashiro',img)
    # 1 灰度
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    # 2 高斯滤波
    imgG = cv2.GaussianBlur(gray,(3,3),0)
    
    # 图片经过卷积
    dst = cv2.Canny(imgG,50,50)
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    21.浮雕效果

    复制代码
    import cv2
    import numpy as np
    img = cv2.imread('mashiro.jpg',1)
    cv2.imshow('mashiro',img)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    dst = np.zeros((height,width,1),np.uint8)
    for i in range(0,height):
        for j in range(0,width-1):
            grayP0 = int(gray[i,j])
            grayP1 = int(gray[i,j+1])
            newP = grayP0-grayP1+150
            if newP>255:
                newP=255
    
            elif newP<0:
                newP=0
            dst[i,j] = newP
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    22.颜色映射

    复制代码
    import cv2
    import numpy as np
    img = cv2.imread('mashiro.jpg',1)
    cv2.imshow('mashiro',img)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    dst = np.zeros((height,width,3),np.uint8)
    for m in range(height):
        for n in range(width):
            b,g,r = img[m,n]
            b = b*1.5
            g = g*1.3
            if b >255:
                b=255
            if g>255:
                g=255
            dst[m,n] = b,g,r
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    23.油画特效

    复制代码
    import cv2
    import numpy as np
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    dst = np.zeros((height,width,3),np.uint8)
    for i in range(4,height-4):
        for j in range(4,width-4):
            array1 = np.zeros(8,np.uint8)
            for m in range(-4,4):
                for n in range(-4,4):
                    p1=int(gray[i+m,j+n]/32)
                    array1[p1]=array1[p1]+1
            currentMax = array1[0]
            for k in range(0,8):
                if currentMax<array1[k]:
                    l=k
            for m in range(-4,4):
                for n in range(-4,4):
                    if gray[i+m,j+n]>(l*32) and gray[i+m,j+n]<((l+1)*32):
                        b,g,r = img[m,n]
            dst[i,j] = b,g,r
    cv2.imshow('mashiro',dst)
    cv2.waitKey(0)
    # 程序算的会很慢很慢
    复制代码

    24.线段绘制

    复制代码
    import cv2
    import numpy as np
    img = cv2.imread('mashiro.jpg',1)
    newImagInfo = (500,500,3)
    dst = np.zeros(newImagInfo,np.uint8)
    # 1.图片信息 2.开始位置 3.结束位置 4.颜色
    cv2.line(dst,(100,100),(400,400),(0,0,255))
    # 5.线条的宽度
    cv2.line(dst,(100,200),(400,200),(0,255,255),20)
    # 6.线条类型
    cv2.line(dst,(100,300),(400,300),(0,255,0),20,cv2.LINE_AA)
    # 绘制三角形,说白了就是三条线段
    cv2.line(dst,(200,150),(50,250),(25,100,255))
    # 第二条线段的起始位置是第一条线段的终止位置
    cv2.line(dst,(50,250),(400,380),(25,100,255))
    # 第三条线段的起始位置是第一条线段的起始位置,终止位置是第二条线段的终止位置
    cv2.line(dst,(200,150),(400,380),(25,100,255))
    
    cv2.imshow('mashiro',dst)
    cv2.waitKey(0)
    复制代码

    25.矩形圆形任意多边形绘制

    复制代码
    import cv2
    import numpy as np
    newImgInfo = 500,500,3
    dst = np.zeros(newImgInfo,np.uint8)
    # 1.图片 2.左上角坐标 3.右下角坐标 4.颜色 5.是否填充(大于零:线条宽度,小于零:是否填充)
    cv2.rectangle(dst,(50,100),(200,300),(255,0,0),-1)
    # 1.图片 2.圆心 3.半径 4.颜色
    cv2.circle(dst,(250,250),(50),(255,0,255),-1,cv2.LINE_AA)
    # 椭圆 1.图片 2.椭圆圆心 3.长轴和短轴的长度 4.偏转角度 5.圆弧起始角度 6.圆弧终止角度 7.颜色 8.是否填充
    cv2.ellipse(dst,(256,256),(150,100),0,0,180,(255,255,0),-1,cv2.LINE_AA)
    # 定义任意角度
    points = np.array([[150,50],[140,140],[200,170],[250,250],[150,50]],np.int32)  # (5,2)
    points = points.reshape((-1,1,2))  # (5,1,2)
    cv2.polylines(dst,[points],True,(0,255,255))
    cv2.imshow('mashiro',dst)
    cv2.waitKey(0)
    复制代码

    26.文字绘制

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    font = cv2.FONT_HERSHEY_COMPLEX
    # 1.图片 2.文字的内容 3.写入的坐标 4.字体 5.字体大小 6.颜色 7,字体的粗细 8.线条类型
    cv2.putText(img,'hello, i am mashiro····',(100,300),font,1,(200,100,255),2,cv2.LINE_AA)
    cv2.imshow('mashiro',img)
    cv2.waitKey(0)
    复制代码

    27.图片绘制

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    img = cv2.imread('mashiro.jpg',1)
    height = int(img.shape[0]*0.2)
    width = int(img.shape[1]*0.2)
    imgResize = cv2.resize(img,(width,height))
    for i in range(height):
        for j in range(width):
            img[i+200,j+350] = imgResize[i,j]
    
    cv2.imshow('mashiro',img)
    cv2.waitKey(0)
    复制代码

    28.彩色图片直方图

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    def ImageHist(img,e_type):
        color = (255,255,255)
        windowName = 'gray'
        if e_type == 31:
            color = (255,0,0)
            windowName = 'b hist'
        elif e_type == 32:
            color = (0,255,0)
            windowName = 'g hist'
        elif e_type == 33:
            color = (0,0,255)
            windowName = 'r hist'
        # 一定要用列表的形式  1.图片 2.计算直方图的通道 3.蒙版mask 4.直方图的size,多少种 5直方图中各个像素的值
        hist = cv2.calcHist([img],[0],None,[256],[0.0,255.0])
        minV,maxV,minV_indice,maxL_indice = cv2.minMaxLoc(hist)
        histImg = np.zeros([256,256,3],np.uint8)
        for h in range(256):
            interNomal = int(hist[h]*256/maxV)
            cv2.line(histImg,(h,256),(h,256-interNomal),color)
        cv2.imshow(windowName,histImg)
        return histImg
    img = cv2.imread('mashiro.jpg',3)
    channels = cv2.split(img)  # RGB ---->R G B
    for i in range(3):
        ImageHist(channels[i],31+i)
    cv2.waitKey(0)
    复制代码

    29.灰度直方图均衡化

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    img = cv2.imread('mashiro.jpg',1)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    cv2.imshow('mashiro',gray)
    dst = cv2.equalizeHist(gray)
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    30.彩色直方图均衡化

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    img = cv2.imread('mashiro.jpg',3)
    cv2.imshow('mashiro',img)
    b,g,r = cv2.split(img)  # split之后 得到三个通道的数据
    bH = cv2.equalizeHist(b)
    gH = cv2.equalizeHist(g)
    rH = cv2.equalizeHist(r)
    result = cv2.merge((bH,gH,rH))  # 将三个通道合成在一起
    cv2.imshow('mashiro1',result)
    cv2.waitKey(0)
    复制代码

    31.YUV直方图均衡化

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    imgYUV = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
    cv2.imshow('mashiro',img)
    channelYUV = cv2.split(imgYUV)
    channelYUV[0] = cv2.equalizeHist(channelYUV[0])
    channels = cv2.merge(channelYUV)
    result = cv2.cvtColor(channels,cv2.COLOR_YCrCb2BGR)
    cv2.imshow('mashiro1',result)
    cv2.waitKey(0)
    复制代码

    32.图片修补

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    img = cv2.imread('mashiro.jpg',1)
    for i in range(200,300):
        img[i,200] = (255,255,255)
        img[i,200+1] = (255,255,255)
        img[i,200-1] = (255,255,255)
    for i in range(150,250):
        img[250,i] = (255,255,255)
        img[250+1,i] = (255,255,255)
        img[250-1,i] = (255,255,255)
    cv2.imwrite('damaged_mashiro.jpg',img)
    
    
    img = cv2.imread('damaged_mashiro.jpg',3)
    cv2.imshow('damaged_mashiro.jpg',img)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    paint = np.zeros((height,width,1),np.uint8)
    for i in range(200,300):
        paint[i,200] = 255
        paint[i,200+1] = 255
        paint[i,200-1] = 255
    for i in range(150,250):
        paint[250,i] = 255,
        paint[250+1,i] = 255
        paint[250-1,i] = 255
    
    cv2.imshow('paint',paint)
    
    imgDst = cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA)
    cv2.imshow('mashiro',imgDst)
    cv2.waitKey(0)
    复制代码

    33.亮度增强

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    img = cv2.imread('mashiro.jpg',1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    dst = np.zeros((height,width,3),np.uint8)
    # 新图片像素的亮度等于原图片像素的亮度加上一个固定值
    cv2.imshow('mashiro',img)
    for i in range(height):
        for j in range(width):
            (b,g,r) = img[i,j]
            bb = int(b)+120  # 自由变换
            gg = int(g)+120
            rr = int(r)+120
            if bb > 255:
                bb = 255
            if gg > 255:
                gg = 255
            if rr > 255:
                rr = 255
            dst[i,j] = img[i,j]
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    复制代码

    34.磨皮美白

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    
    # 原理:双边滤波
    import cv2
    img = cv2.imread('mashiro.jpg',1)
    cv2.imshow('mashiro',img)
    dst = cv2.bilateralFilter(img,15,35,35)
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    # 由于是动漫图片,然鹅并看不出什么效果
    复制代码

    35.高斯滤波

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    
    import cv2
    
    img = cv2.imread('mashiro.jpg',1)
    cv2.imshow('mashiro',img)
    dst = cv2.GaussianBlur(img,(5,5),1.5)
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    # 如果原图上有许多的小点点,那么高斯滤波可以过滤掉,同时图片也会变得模糊
    复制代码

    36.均值滤波

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg',1)
    cv2.imshow('mashiro',img)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    dst = np.zeros((height,width,3),np.uint8)
    for i in range(3,height-3):
        for j in range(3,width-3):
            sum_b = int(0)
            sum_g = int(0)
            sum_r = int(0)
            for m in range(-3,3):
                for n in range(-3,3):
                    b,g,r = img[i+m,j+n]
                    sum_b = sum_b + int(b)
                    sum_g = sum_g + int(g)
                    sum_r = sum_r + int(r)
            b = np.uint8(sum_b/36)
            g = np.uint8(sum_g/36)
            r = np.uint8(sum_r/36)
            dst[i,j] = b,g,r
    
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    # 然而并无卵用,程序还很慢
    复制代码

    37.中值滤波

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 
    # author:love_cat
    import cv2
    import numpy as np
    
    img = cv2.imread('mashiro.jpg', 1)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cv2.imshow('mashiro', img)
    dst = np.zeros((height, width, 3), np.uint8)
    collect = np.zeros(9, np.uint8)
    for i in range(1, height-1):
        for j in range(1, width-1):
            k = 0
            for m in range(-1, 2):
                for n in range(-1, 2):
                    gray = img[i + m, j + n]
                    collect[k] = gray
                    k = k + 1
            for k in range(0, 9):
                p1 = collect[k]
                for t in range(k + 1, 9):
                    if p1 < collect[t]:
                        mid = collect[t]
                        collect[t] = p1
                        p1 = mid
            dst[i, j] = collect[4]
    cv2.imshow('mashiro1',dst)
    cv2.waitKey(0)
    # 效果并不理想,程序也很慢
    复制代码

    38.视频分解成图片

    复制代码
    # 视频分解图片
    # 1 load 2 info 3 parse 4 imshow imwrite
    import cv2
    # 打开一个视频获取,一个句柄
    cap = cv2.VideoCapture(r"01.mp4")
    # 判断是否打开
    isOpened = cap.isOpened
    print(isOpened)
    # 获取视频的帧率
    fps = cap.get(cv2.CAP_PROP_FPS)
    # 获取图片的宽度和高度
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    
    print("帧率=%s,宽度=%s,高度=%s" % (fps, width, height))
    
    i = 0
    while isOpened:
        if i == 100:
            break  # 我们只获取100张图片
        else:
            i += 1
        # 读取每一张flag,frame
        # flag表示是否读取成功
        # frame表示图片的内容
        (flag, frame) = cap.read()
        fileName = "image"+str(i)+".jpg"
        print(fileName)
        if flag:
            cv2.imwrite(fileName, frame, [cv2.IMWRITE_JPEG_QUALITY, 100])  # 表示精度最高
    print("end!!!")
    
    # 程序运行结果
    '''
    <built-in method isOpened of cv2.VideoCapture object at 0x04F90630>
    帧率=15.0,宽度=1280,高度=720
    image1.jpg
    image2.jpg
    image3.jpg
    image4.jpg
    image5.jpg
    image6.jpg
    image7.jpg
    image8.jpg
    image9.jpg
    image10.jpg
    image11.jpg
    image12.jpg
    image13.jpg
    image14.jpg
    image15.jpg
    image16.jpg
    image17.jpg
    image18.jpg
    image19.jpg
    image20.jpg
    image21.jpg
    image22.jpg
    image23.jpg
    image24.jpg
    image25.jpg
    image26.jpg
    image27.jpg
    image28.jpg
    image29.jpg
    image30.jpg
    image31.jpg
    image32.jpg
    image33.jpg
    image34.jpg
    image35.jpg
    image36.jpg
    image37.jpg
    image38.jpg
    image39.jpg
    image40.jpg
    image41.jpg
    image42.jpg
    image43.jpg
    image44.jpg
    image45.jpg
    image46.jpg
    image47.jpg
    image48.jpg
    image49.jpg
    image50.jpg
    image51.jpg
    image52.jpg
    image53.jpg
    image54.jpg
    image55.jpg
    image56.jpg
    image57.jpg
    image58.jpg
    image59.jpg
    image60.jpg
    image61.jpg
    image62.jpg
    image63.jpg
    image64.jpg
    image65.jpg
    image66.jpg
    image67.jpg
    image68.jpg
    image69.jpg
    image70.jpg
    image71.jpg
    image72.jpg
    image73.jpg
    image74.jpg
    image75.jpg
    image76.jpg
    image77.jpg
    image78.jpg
    image79.jpg
    image80.jpg
    image81.jpg
    image82.jpg
    image83.jpg
    image84.jpg
    image85.jpg
    image86.jpg
    image87.jpg
    image88.jpg
    image89.jpg
    image90.jpg
    image91.jpg
    image92.jpg
    image93.jpg
    image94.jpg
    image95.jpg
    image96.jpg
    image97.jpg
    image98.jpg
    image99.jpg
    image100.jpg
    end!!!
    '''
    转自:https://www.cnblogs.com/traditional/p/9043931.html
    复制代码
  • 相关阅读:
    Spring Boot 知识笔记(thymleaf模板引擎)
    Spring Boot 知识笔记(servlet、监听器、拦截器)
    Spring Boot 知识笔记(Filter过滤器)
    Spring Boot 知识笔记(全局异常)
    Spring Boot 知识笔记(配置文件)
    Spring Boot 知识笔记(热部署)
    Spring Boot 知识笔记(创建maven项目、HTTP接口)
    正则表达式回溯漏洞
    HSTS的来龙去脉
    CAS单点登录详细流程
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/10104383.html
Copyright © 2020-2023  润新知