python中opencv是什么_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)

copycode.gif

1229382-20180516002528393-1109764650.png

2. 图片写入

copycode.gif

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author:love_cat

import cv2

img = cv2.imread('mashiro.jpg',1)

cv2.imwrite('mashiro1.jpg',img)

copycode.gif

3.不同图片质量保存

copycode.gif

#!/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,数字越低,压缩比越低

copycode.gif

4.像素操作基础

copycode.gif

#!/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)

copycode.gif

1229382-20180516002926491-229897311.png

5.图片缩放

copycode.gif

#!/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)

copycode.gif

1229382-20180516003038351-475109920.png

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

copycode.gif

#!/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)

copycode.gif

7.图片剪切

copycode.gif

#!/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)

copycode.gif

1229382-20180516003301212-1506066048.png

8.图片移位

copycode.gif

#!/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)

copycode.gif

1229382-20180516003348129-1942194599.png

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

copycode.gif

#!/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)

copycode.gif

10.图片镜像

copycode.gif

#!/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)

copycode.gif

1229382-20180516003513940-473980736.png

11.图片仿射变换

copycode.gif

#!/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)

copycode.gif

1229382-20180516003618302-564325183.png

12.图片旋转

copycode.gif

#!/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)

copycode.gif

1229382-20180516003655088-2126333148.png

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

copycode.gif

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author:love_cat

import cv2

import glob

import numpy as np

all_jpg = glob.glob(r'C:\Users\Administrator\Desktop\satori\*.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:\Users\Administrator\Desktop\satori\scale\{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:\Users\Administrator\Desktop\satori\translation\{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:\Users\Administrator\Desktop\satori\flip\{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:\Users\Administrator\Desktop\satori\shear\{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:\Users\Administrator\Desktop\satori\rotation\{count}.jpg',dst)

copycode.gif

14.灰度处理

copycode.gif

#!/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)

copycode.gif

1229382-20180516004017379-967034486.png

15.颜色反转

copycode.gif

#!/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)

copycode.gif

1229382-20180516004148060-1275928837.png

1229382-20180516004125327-989403274.png

16.马赛克

copycode.gif

#!/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)

copycode.gif

1229382-20180516004226525-1813911357.png

17.毛玻璃

copycode.gif

#!/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)

copycode.gif

1229382-20180516004307451-335150380.png

18.真白18岁生日快乐

19.图片融合

copycode.gif

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)

# 貌似程序有问题

copycode.gif

1229382-20180516004407016-1753639708.png

20.边缘检测

copycode.gif

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)

copycode.gif

1229382-20180516004445637-255514107.png

21.浮雕效果

copycode.gif

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)

copycode.gif

1229382-20180516004526996-995268397.png

22.颜色映射

copycode.gif

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)

copycode.gif

1229382-20180516004604470-2111127942.png

23.油画特效

copycode.gif

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

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)

# 程序算的会很慢很慢

copycode.gif

1229382-20180516004645534-1863837143.png

24.线段绘制

copycode.gif

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)

copycode.gif

1229382-20180516004718974-1311875951.png

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

copycode.gif

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)

copycode.gif

1229382-20180516004821100-1214876246.png

26.文字绘制

copycode.gif

#!/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)

copycode.gif

1229382-20180516004938593-1133848221.png

27.图片绘制

copycode.gif

#!/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)

copycode.gif

1229382-20180516005023699-677773526.png

28.彩色图片直方图

copycode.gif

#!/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)

copycode.gif

1229382-20180516005057471-1283057062.png

29.灰度直方图均衡化

copycode.gif

#!/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)

copycode.gif

1229382-20180516005134009-1177753774.png

30.彩色直方图均衡化

copycode.gif

#!/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)

copycode.gif

1229382-20180516005210606-1587679815.png

31.YUV直方图均衡化

copycode.gif

#!/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)

copycode.gif

1229382-20180516005251773-1717073847.png

32.图片修补

copycode.gif

#!/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)

copycode.gif

1229382-20180516005321956-234980789.png

33.亮度增强

copycode.gif

#!/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)

copycode.gif

1229382-20180516005352907-1982456861.png

34.磨皮美白

copycode.gif

#!/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)

# 由于是动漫图片,然鹅并看不出什么效果

copycode.gif

1229382-20180516005428565-1254574967.png

35.高斯滤波

copycode.gif

#!/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)

# 如果原图上有许多的小点点,那么高斯滤波可以过滤掉,同时图片也会变得模糊

copycode.gif

1229382-20180516005500692-1933760109.png

36.均值滤波

copycode.gif

#!/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)

# 然而并无卵用,程序还很慢

copycode.gif

1229382-20180516005537035-567840293.png

37.中值滤波

copycode.gif

#!/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)

# 效果并不理想,程序也很慢

copycode.gif

1229382-20180516005610810-1138547707.png

38.视频分解成图片

copycode.gif

# 视频分解图片

# 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!!!")

# 程序运行结果

'''

帧率=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

copycode.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值