1、图像剪切
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
dst = img[100:200,100:300]
cv2.imshow('dst',dst)
cv2.waitKey(0)
2、图像缩放
import cv2
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
print(imgInfo)
height = imgInfo[0]
width = imgInfo[1]
print(height,width)
dstHeight = int(height*0.5)
dstWidth = int(width*0.5)
print(dstHeight,dstWidth)
dstimg = cv2.resize(img,(dstWidth,dstHeight))
cv2.imshow('image',dstimg)
cv2.waitKey(0)```
```python
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dstHeight = int(height/2)
dstWidth = int(width/2)
dstImg = 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))
dstImg[i,j] = img[iNew,jNew]
cv2.imshow('yss',dstImg)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
h = imgInfo[0]
w = imgInfo[1]
matshift = np.float32([[0.5,0,0],[0,0.5,0]])
dstImg = cv2.warpAffine(img,matshift,(h,w),borderValue=(155,150,200))
cv2.imshow('dst',dstImg)
cv2.waitKey(0)
3、图像移位
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
h = imgInfo[0]
w = imgInfo[1]
0,1] y] 200] y+200]
matShift = np.float32([[1,0,100],[0,1,200]])
dst = cv2.warpAffine(img,matShift,(h,w))
cv2.imshow('dst',dst)
cv2.waitKey(0)
4、图像毛玻璃
import cv2
import numpy as np
import random
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mm=8
for i in range(0,height-mm):
for j in range(0,width-mm):
index = int(random.random()*8)
(b,g,r) = img[i+index,j+index]
img[i,j] = (b,g,r)
cv2.imshow('img',img)
cv2.waitKey(0)
5、图像灰度处理
import cv2
img = cv2.imread('image0.jpg',0)
print(img.shape)
import cv2
img = cv2.imread('image0.jpg',1)
dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('dst',dst)
cv2.waitKey(0)```
```python
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst = np.zeros((height,width),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 = (b+g+r)/3
dst[i,j] = gray
cv2.imshow('dst',dst)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst = np.zeros((height,width),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.299+g*0.587+b*0.114
dst[i,j] = gray
cv2.imshow('dst',dst)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
(b1,g1,r1) = img[1,2]
print(b1,g1,r1)
gray = (b1+g1+r1)/3
img[1,2] = gray
(b2,g2,r2) = img[1,2]
print(b2,g2,r2)
6、图像旋转
```python
7、图像镜像
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
h = imgInfo[0]
w = imgInfo[1]
d = imgInfo[2]
newImgInfo = (h*2,w,d)
dst = np.zeros(newImgInfo,np.uint8)
for i in range(0,h):
for j in range(0,w):
dst[i,j] = img[i,j]
dst[h*2-i-1,j] = img[i,j]
for i in range(0,w):
dst[h,i]=(0,0,255)
cv2.imshow('dst',dst)
cv2.waitKey(0)
8、图像融合
import cv2
import numpy as np
img0 = cv2.imread('image0.jpg',1)
img1 = cv2.imread('image1.jpg',1)
imgInfo = img0.shape
height = imgInfo[0]
width = imgInfo[1]
roiH = int(height/2)
roiW = int(width/2)
img0ROI = img0[0:roiH,0:roiW]
img1ROI = img1[0:roiH,0:roiW]
dst = np.zeros((roiH,roiW,3),np.uint8)
dst = cv2.addWeighted(img0ROI,0.8,img1ROI,0.2,0)
cv2.imshow('dst',dst)
cv2.waitKey(0)
9、图像颜色反转
import cv2
import numpy as np
img = cv2.imread('image0.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):
grayPiexl = gray[i,j]
dst[i,j] = 255-grayPiexl
cv2.imshow('dst',dst)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread('image0.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]
dst[i,j] = (255-b,255-g,255-r)
cv2.imshow('dst',dst)
cv2.waitKey(0)```
10、图像马赛克
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
for i in range(100,300):
for j in range(100,200):
if i%10==0 and j%10==0:
for m in range(0,10):
for n in range(0,10):
(b,g,r) = img[i,j]
img[m+i,n+j] = (b,g,r)
cv2.imshow('img',img)
cv2.waitKey(0)
11、图像修补
import cv2
import numpy as np
img = cv2.imread('image0.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.jpg',img)
cv2.imshow('image',img)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread('damaged.jpg',1)
cv2.imshow('img',img)
height = img.shape[0]
width = img.shape[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('image',imgDst)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread('damaged.jpg',1)
cv2.imshow('img',img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 245, 255, cv2.THRESH_BINARY)
cv2.imshow('image',binary)
dstImg = cv2.inpaint(img,binary,3,cv2.INPAINT_TELEA)
cv2.imshow('dst',dstImg)
cv2.waitKey(0)
import cv2
import numpy as np
img = cv2.imread('image00.jpg',1)
cv2.imshow('img',img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 245, 255, cv2.THRESH_BINARY)
cv2.imshow('image',binary)
kernel_3X3 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
binary_after_open = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel_3X3)
dstImg = cv2.inpaint(img,binary,3,cv2.INPAINT_TELEA)
cv2.imshow('dst',dstImg)
cv2.waitKey(0)
12、图像边缘检测
import cv2
import numpy as np
import random
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
cv2.imshow('img',img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgG = cv2.GaussianBlur(gray,(3,3),0)
dst = cv2.Canny(img,50,50)
cv2.imshow('dst',dst)
cv2.waitKey(0)
'''[1,2,1 [1 0 -1
0,0,0 2 0 -2
-1,-2,-1] 1 0 -1]
竖直矩阵 水平矩阵
用算子中的元素对应乘以相同大小的像素块
'''
import cv2
import numpy as np
import math
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
cv2.imshow('src',img)
dst = np.zeros((height,width),np.uint8)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
for i in range(0,height-2):
for j in range(0,width-2):
y = gray[i,j]*1+gray[i,j+1]*2+gray[i,j+2]*1
-gray[i+2,j]*1-gray[i+2,j+1]*2-gray[i+2,j+2]*1
x = gray[i,j]*1-gray[i,j+2]*1+gray[i+1,j]*2
-gray[i+1,j+2]*2+gray[i+2,j]*1-gray[i+2,j+2]*1
grad = math.sqrt(x*x+y*y)
if grad>50:
dst[i,j] = 255
else:
dst[i,j]=0
cv2.imshow('dst',dst)
cv2.waitKey(0)