python--opencv模块
1.图片的读取与展示
#!/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:\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)
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!!!
'''
python--opencv模块的更多相关文章
- 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台
搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...
- RPi 2B python opencv camera demo example
/************************************************************************************** * RPi 2B pyt ...
- 利用Anaconda软件安装opencv模块
先说明我安装opencv环境的原因:因为我Anaconda中创建了tensorflow和pytorch虚拟环境,想在每个虚拟环境下都安装opencv模块,这样在后期进行代码调试的时候更加便捷,以下是我 ...
- Python opencv提取视频中的图片
作者:R语言和Python学堂链接:https://www.jianshu.com/p/e3c04d4fb5f3 这个函数就是本文要介绍的video2frames()函数,功能就是从视频中提取图片,名 ...
- 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...
- [Python]-opencv-python模块(cv2)-图片读取和格式转换
python常常用opencv模块来处理图像. import cv2 as cv 读取图片:imread() 默认按照彩色三通道读取: img = cv2.imread(path) 读取灰度图: im ...
- Python标准模块--threading
1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...
- Python的模块引用和查找路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
随机推荐
- Sublime Text 3配置 Python3 开发环境
来自 https://www.cnblogs.com/zhangqinwei/p/6886600.html Sublime Text作为一款支持多种编程语言的文本编辑神器,深受广大开发者的喜爱.通过简 ...
- HDU 3697 Selecting courses(贪心+暴力)(2010 Asia Fuzhou Regional Contest)
Description A new Semester is coming and students are troubling for selecting courses. Students ...
- phpcms v9手机门户配置方法
一.确定一个域名作为你手机wap站点的访问域名,例如:http://m.tezhengzong.com. 接下来在域名管理系统中简析这个域名到你的服务器地址. 二.修改\caches\configs\ ...
- 软工实践Beta冲刺(7/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- Hiberante可配置参数
###################### ### Query Language ### ###################### ## define query language consta ...
- P3539 [POI2012]ROZ-Fibonacci Representation
题目描述 The Fibonacci sequence is a sequence of integers, called Fibonacci numbers, defined as follows: ...
- P4462 [CQOI2018]异或序列
题目描述 已知一个长度为n的整数数列 a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an ,给定查询参数l.r,问在 al,al+1,...,ara_l,a_{l+1 ...
- 从CUBIC/BBR的TCP ACK失速说起
上周有同事问,延迟ACK到底对应用层会产生什么后果,我也不知道该如何作答,于是丢了一个链接: TCP之Delay ACK在Linux和Windows上实现的异同-Linux的自适应ACK: 是的,这是 ...
- BZOJ1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 【筛法】
题目 今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏. 贝茜让N(1≤N≤100000)头奶牛坐成一个圈.除了1号与N号奶牛外,i号奶牛与i-l号和i+l号奶牛相邻.N号奶牛与1号奶牛相邻 ...
- [模拟赛] GotoAndPlay
GotoAndPlay 10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生. 玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者... Description 小松鼠终于吃撑了, ...
