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,具备如下优点: 可以通过设置不同 ...
随机推荐
- pandas DataFrame行或列的删除方法
pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...
- Browser-Solidity的本地安装及使用介绍
Browser-Solidity的本地安装及使用介绍 正所谓工欲善其事必先利其器,巧妇也难为无米之炊,所以在学习智能合约之前,必须要先把工具准备好.Browser-Solidity 是 Ethereu ...
- 【iOS开发】动态添加子视图 UIView 的正确方法
很多时候哥比较喜欢用代码添加视图,特别是要同时加很多UIView时,而且跟 xib 比起来代码更容易管理,在多人的项目中代码不容易 conflict. 但小牛哥最近发现很多新人都不太清楚正确的使用方法 ...
- Jlink 软件断点和硬件断点
调试2440 RAM拷贝至SDRAM遇到的问题 汇编代码主要是初始化一些寄存器,关狗,初始化时钟,初始化存储管理器以便访问内存,然后将SoC上4k RAM数据拷贝至SDRAM,然后在SRAM里面运行, ...
- To Chromium之浏览器外框UI
先不去管那些webkit,V8 engine, Parser, security,IPC... 先来看看Chromium的外框UI是那些code负责的,如果自己可以定制化一下,应该蛮好玩的. TBD. ...
- 列数不固定时怎么使用el-tabel展示数据
<el-table :data="contents" stripe> <el-table-column v-for="(item, index) in ...
- JavaScript归并方法reduce()和reduceRight()
ECMAScript 5还新增了两个归并数组的方法:reduce()和reduceRight().这两个方法都会迭代数组的所有项,然后构建一个最终返回的值.其中,reduce()方法从数组的第一项开始 ...
- ASP.NET页面之间传值Cookie(3)
这个也是大家常使用的方法,Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等, 用户下次访问就可以通过检索获得以前的信息.所以Cookie也 ...
- LeetCode--Remove Linked List Element
Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...
- 【题解】MUTC2013idiots
我是先知道的这题是FFT然后再做的,知道是FFT其实就是个套路题啦.首先,我们容易发现 \(P = \frac{a}{b}\) 其中a表示合法的方案数,而b表示全部的方案数. b的值即为\(C\lef ...
