OPENCV

day 1

import cv2
lena = cv2.imread('C:\\AppData\\image\\1.png',0)
cv2.imshow("domo",lena)
cv2.waitKey()
cv2.destroyWindow("domo")
import cv2
img = cv2.imread('C:\\AppData\\image\\1.png',0)
cv2.imshow("befor",img)
for i in range(10,100):
    for j in range(80,200):
        img[i,j] = 0
cv2.imshow("after",img)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
img = np.zeros((300,300,3),dtype = np.uint8)
img[:,0:100,2] = 255
img[:,100:200,1] = 255
img[:,200:300,0] = 255
cv2.imshow("img",img)
cv2.waitKey()
import numpy as np
import cv2
img = np.random.randint(0,256,size = [256,256],dtype = np.uint8)
cv2.imshow("demo",img)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
lena = cv2.imread("C:\\AppData\\image\\pyimg.jpg")
cv2.imshow("lena",lena)
#b = lena[:,:,0]
#g = lena[:,:,1]
#r = lena[:,:,2]
b,g,r = cv2.split(lena)
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
lena[:,:,0] = 0
cv2.imshow("lena0",lena)
lena[:,:,1] = 0
cv2.imshow("lena1",lena)
cv2.waitKey()
cv2.destroyAllWindows()

day2

import cv2
import numpy as np
lena = cv2.imread("C:\\AppData\\image\\pyimg.jpg",-1)
b = np.zeros(lena.shape,dtype = np.uint8)
b[100:300,200:300] = 255
c = cv2.bitwise_and(lena,b)
cv2.imshow("lena",lena)
cv2.imshow("b",b)
cv2.imshow("c",c)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2#位层提取
import numpy as np
lena = cv2.imread("C:\\AppData\\image\\pyimg.jpg",0)
cv2.imshow("lena",lena)
r,c = lena.shape
x = np.zeros((r,c,8),dtype = np.uint8)
for i in range(8):
    x[:,:,i] = 2**i
y = np.zeros((r,c,8),dtype = np.uint8)
for i in range(8):
    y[:,:,i] = cv2.bitwise_and(lena,x[:,:,i])
    mask = y[:,:,i] > 0
    y[mask] = 255
    cv2.imshow(str(i),y[:,:,i])
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
lena = cv2.imread("C:\\AppData\\image\\120.jpg",1)
cv2.imshow("lena",lena)
hsv = cv2.cvtColor(lena,cv2.COLOR_BGR2HSV)
minBlue = np.array([110,50,50])
maxBlue = np.array([130,255,255])

mask = cv2.inRange(hsv,minBlue,maxBlue)

blue = cv2.bitwise_and(lena,lena,mask = mask)
cv2.imshow("blue",blue)

minGreen = np.array([50,50,50])
maxGreen = np.array([70,255,255])

mask = cv2.inRange(hsv,minGreen,maxGreen)

green = cv2.bitwise_and(lena,lena,mask = mask)
cv2.imshow("green",green)

minRed = np.array([0,50,50])
maxRed = np.array([30,255,255])

mask = cv2.inRange(hsv,minRed,maxRed)

red = cv2.bitwise_and(lena,lena,mask = mask)
cv2.imshow("red",red)

cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
lena = cv2.imread("C:\\AppData\\image\\2.jpg",1)
cv2.imshow("lena",lena)
hsv = cv2.cvtColor(lena,cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)
minHue = 5
maxHue = 170
hueMask = cv2.inRange(h,minHue,maxHue)
minSat = 25
maxSat = 166
satMask = cv2.inRange(s,minSat,maxSat)
mask = hueMask & satMask
img = cv2.bitwise_and(lena,lena,mask = mask)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
lena = cv2.imread("C:\\AppData\\image\\2.jpg",1)
cv2.imshow("lena",lena)
hsv = cv2.cvtColor(lena,cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)
v[:,:] = 255
newhsv = cv2.merge([h,s,v])
art = cv2.cvtColor(lena,cv2.COLOR_HSV2BGR)
cv2.imshow("atr",art)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#旋转
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
#rst = cv2.resize(img,None,fx = 2,fy = 0.5)
#print("img.shape = ",img.shape)
#print("rst.shape = ",rst.shape)
x = cv2.flip(img,0)
y = cv2.flip(img,1)
xy = cv2.flip(img,-1)
cv2.imshow("new1",x)
cv2.imshow("new12",y)
cv2.imshow("new2",xy)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
height,width = img.shape[:2]
x = 100
y = 200
M = cv2.getRotationMatrix2D((width/2,height/2),45,0.6)
rotate = cv2.warpAffine(img,M,(width,height))
#rst = cv2.resize(img,None,fx = 2,fy = 0.5)
#print("img.shape = ",img.shape)
#print("rst.shape = ",rst.shape)
#x = cv2.flip(img,0)
#y = cv2.flip(img,1)
#xy = cv2.flip(img,-1)
cv2.imshow("new1",img)
cv2.imshow("new12",rotate)
#cv2.imshow("new2",xy)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
rows,cols,ch = img.shape
p1 = np.float32([[0,0],[cols-1,0],[0,rows-1]])#三个点
p2 = np.float32([[0,rows*0.33],[cols*0.85,rows*0.25],[cols*0.15,rows*0.7]])#三个点
M = cv2.getAffineTransform(p1,p2)#前三个后三个求转化矩阵
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
rows,cols,ch = img.shape
p1 = np.float32([[150,50],[400,50],[60,450],[314,450]])
p2 = np.float32([[50,50],[cols-50,50],[50,rows-50],[rows-50,cols-50]])
M = cv2.getPerspectiveTransform(p1,p2)
dst = cv2.warpPerspective(img,M,(cols,rows))
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2#重映射——复制
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
rows,cols,ch = img.shape
mapx = np.zeros(img.shape[:2],np.float32)
mapy = np.zeros(img.shape[:2],np.float32)
for i in range(rows):
    for j in range(cols):
        mapx.itemset((i,j),j)
        mapy.itemset((i,j),i)
        
dst = cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2#缩放
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
rows,cols,ch = img.shape
mapx = np.zeros(img.shape[:2],np.float32)
mapy = np.zeros(img.shape[:2],np.float32)
for i in range(rows):
    for j in range(cols):
        if 0.25*cols < i <0.75*cols and 0.25*rows < j < 0.75*rows:
            mapx.itemset((i,j),2*(j-cols*0.25)+0.5)
            mapy.itemset((i,j),2*(i-rows*0.25)+0.5)
        else:
            mapx.itemset((i,j),0)
            mapy.itemset((i,j),0)
        
dst = cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()

Day3

在这里插入图片描述

import cv2#二值化
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
t,rst = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
r,rst1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
cv2.imshow("img",img)
cv2.imshow("rst",rst)
cv2.imshow("rst1",rst1)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
t,rst = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)#trunc

#r,rst1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
cv2.imshow("img",img)
cv2.imshow("rst",rst)
#cv2.imshow("rst1",rst1)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",1)
t,rst = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)#trunc

#r,rst1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)#_INV
cv2.imshow("img",img)
cv2.imshow("rst",rst)
#cv2.imshow("rst1",rst1)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",0)
t1,thd = cv2.threshold(img,127,255,cv2.THRESH_BINARY)#trunc
athdMEAN = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)
athdGAUS = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)

cv2.imshow("img",img)
cv2.imshow("thd",thd)
cv2.imshow("athdMEAN",athdMEAN)
cv2.imshow("athdGAUS",athdGAUS)

cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\2.jpg",0)
t1,thd = cv2.threshold(img,127,255,cv2.THRESH_BINARY)#trunc
#athdMEAN = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,7,3)
#athdGAUS = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,7,3)
t2,otsu = cv2.threshold(img,200,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
print(t2)
cv2.imshow("img",img)
cv2.imshow("thd",thd)
cv2.imshow("athdMEAN",otsu)
#cv2.imshow("athdGAUS",athdGAUS)

cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

import cv2#去噪
import numpy as np
img = cv2.imread("C:\\AppData\\image\\120.jpg")
r5 = cv2.blur(img,(10,10))
cv2.imshow("img",img)
cv2.imshow("r5",r5)
cv2.waitKey()
cv2.destroyAllWindows()

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\120.jpg")
r5 = cv2.GaussianBlur(img,(5,5),0,0)
cv2.imshow("img",img)
cv2.imshow("r5",r5)
cv2.waitKey()
cv2.destroyAllWindows()

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\120.jpg")
r5 = cv2.medianBlur(img,5)
cv2.imshow("img",img)
cv2.imshow("r5",r5)
cv2.waitKey()
cv2.destroyAllWindows()

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\120.jpg")
r5 = cv2.bilateralFilter(img,25,160,160)
cv2.imshow("img",img)
cv2.imshow("r5",r5)
cv2.waitKey()
cv2.destroyAllWindows()

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\120.jpg")
#r5 = cv2.bilateralFilter(img,25,160,160)
kernel = np.ones((9,9),np.float32)/81#自定义卷积核
r5 = cv2.filter2D(img,-1,kernel)
cv2.imshow("img",img)
cv2.imshow("r5",r5)
cv2.waitKey()
cv2.destroyAllWindows()

day4

import cv2#腐蚀
img = cv2.imread("C:\\AppData\\image\\001.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((10,10),np.uint8)
dst = cv2.erode(img,kernel,iterations = 5)
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#膨胀
img = cv2.imread("C:\\AppData\\image\\001.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((10,10),np.uint8)
dst = cv2.dilate(img,kernel,iterations = 5)
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()

通用形态学 cv2.morphologyEx()

在这里插入图片描述

import cv2
img = cv2.imread("C:\\AppData\\image\\001.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((10,10),np.uint8)
dst = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()

dst = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

dst = cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

在这里插入图片描述

dst = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)#礼帽  增强噪点
dst = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)#黑帽  获得比原来边缘更暗的边缘部分
import cv2#使用不同形状的核
img = cv2.imread("C:\\AppData\\image\\001.jpg",-1)
kernel1 = np.ones((5,5),np.uint8)
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT,(59,59))#矩形
kernel3 = cv2.getStructuringElement(cv2.MORPH_CROSS,(59,59))#十字
kernel4 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(59,59))#椭圆
dst = cv2.dilate(img,kernel1)#
dst1 = cv2.dilate(img,kernel2)#
dst2 = cv2.dilate(img,kernel3)#
dst3 = cv2.dilate(img,kernel4)#
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.imshow("dst1",dst1)
cv2.imshow("dst2",dst2)
cv2.imshow("dst3",dst3)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

图像梯度

import cv2#
img = cv2.imread("C:\\AppData\\image\\002.jpg",0)
Sobelx = cv2.Sobel(img,cv2.CV_64F,1,0)
Sobelx1 = cv2.convertScaleAbs(Sobelx)
cv2.imshow("img",img)
cv2.imshow("Sobelx",Sobelx)
cv2.imshow("Sobelx1",Sobelx1)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#
img = cv2.imread("C:\\AppData\\image\\002.jpg",0)
Sobelx = cv2.Sobel(img,cv2.CV_64F,1,0)
Sobelx1 = cv2.convertScaleAbs(Sobelx)
Sobely = cv2.Sobel(img,cv2.CV_64F,0,1)
Sobely1 = cv2.convertScaleAbs(Sobely)
Sobelxy = cv2.addWeighted(Sobelx1,0.5,Sobely1,0.5,0)
cv2.imshow("img",img)
cv2.imshow("Sobelx",Sobelx)
cv2.imshow("Sobely",Sobely)
cv2.imshow("Sobelx1",Sobelx1)
cv2.imshow("Sobely1",Sobely1)
cv2.imshow("Sobelxy",Sobelxy)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#
img = cv2.imread("C:\\AppData\\image\\002.jpg",0)
Sobelx = cv2.Scharr(img,cv2.CV_64F,1,0)
Sobelx1 = cv2.convertScaleAbs(Sobelx)
Sobely = cv2.Scharr(img,cv2.CV_64F,0,1)
Sobely1 = cv2.convertScaleAbs(Sobely)
Sobelxy = cv2.addWeighted(Sobelx1,1,Sobely1,1,0)
cv2.imshow("img",img)
cv2.imshow("Sobelx",Sobelx)
cv2.imshow("Sobely",Sobely)
cv2.imshow("Sobelx1",Sobelx1)
cv2.imshow("Sobely1",Sobely1)
cv2.imshow("Sobelxy",Sobelxy)
cv2.waitKey()
cv2.destroyAllWindows()

import cv2#
img = cv2.imread("C:\\AppData\\image\\002.jpg",0)
Sobelx = cv2.Scharr(img,cv2.CV_64F,1,0)
Sobelx1 = cv2.convertScaleAbs(Sobelx)
Sobely = cv2.Scharr(img,cv2.CV_64F,0,1)
Sobely1 = cv2.convertScaleAbs(Sobely)
Sobelxy = cv2.addWeighted(Sobelx1,1,Sobely1,1,0)
kernel = np.ones((3,3),np.uint8)
dst = cv2.erode(Sobelxy,kernel,iterations = 1)
cv2.imshow("img",img)
cv2.imshow("Sobelx",Sobelx)
cv2.imshow("Sobely",Sobely)
cv2.imshow("Sobelx1",Sobelx1)
cv2.imshow("Sobely1",Sobely1)
cv2.imshow("Sobelxy",Sobelxy)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#拉普拉斯
import numpy as np
img = cv2.imread("C:\\AppData\\image\\002.jpg",0)
Laplacian = cv2.Laplacian(img,cv2.CV_64F)
Laplacian = cv2.convertScaleAbs(Laplacian)
cv2.imshow("Laplacian",Laplacian)
cv2.waitKey()
cv2.destroyAllWindows()

dya5

Canny边缘检测

1.去噪 2.梯度和方向3.取大4.过滤

img = cv2.imread("C:\\AppData\\image\\002.jpg",0)
r1 = cv2.Canny(img,128,200)
r2 = cv2.Canny(img,32,128)
cv2.imshow("img",img)
cv2.imshow("r1",r1)
cv2.imshow("r2",r2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

img = cv2.imread("C:\\AppData\\image\\002.jpg",0)#高斯金字塔
up = cv2.pyrUp(img)
down = cv2.pyrDown(up)
diff = img - down
img1 = down + diff#拉普拉斯   L0 = G0 - cv2.pyrUP(G)
xo = img1 - img
cv2.imshow("img",img)
cv2.imshow("up",up)
cv2.imshow("down",down)
cv2.imshow("diff",diff)
cv2.imshow("img1",img1)
cv2.imshow("xxo",xo)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

图像轮廓

img = cv2.imread("C:\\AppData\\image\\004.jpg",-1)#
gray0 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY,1)#色彩空间转化
ret,binary = cv2.threshold(gray0,127,255,cv2.THRESH_BINARY_INV)#阈值处理
kernel = np.ones((5,5),np.uint8)#做核
dst = cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel)#开运算先腐蚀再膨胀
contours,hierarchy = cv2.findContours(dst,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) #CV4.4返回值只有两个轮廓和关系
cv2.drawContours(img,contours,-1,(0,0,255),5)#画图
print(len(contours))#轮廓数
cv2.imshow("gray",gray0)
cv2.imshow("binary",dst)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
img = cv2.imread("C:\\AppData\\image\\005.jpg",-1)#
gray0 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY,1)#色彩空间转化
ret,binary = cv2.threshold(gray0,200,255,cv2.THRESH_BINARY_INV)#阈值处理
kernel = np.ones((5,5),np.uint8)#做核
dst = cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel)#开运算先腐蚀再膨胀
contours,hierarchy = cv2.findContours(dst,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) #CV4.4返回值只有两个轮廓和关系
cv2.drawContours(img,contours,-1,(0,0,255),2)#画图
n = len(contours)#轮廓数
contoursimg = []
length = []
for i in range(n):
    temp = np.zeros(img.shape,np.uint8)
    contoursimg.append(temp)
    cv2.drawContours(contoursimg[i],contours,i,(255,0,255),2)
    cv2.imshow("contoursimg"+str(i),contoursimg[i])
    #print("contoursimg面积1"+str(i)+"   " , cv2.moments(contours[i])['m00'])#面积1
    #print("contoursimg面积2"+str(i)+"   " , cv2.contourArea(contours[i]))#面积2
    print("contoursimg长度"+str(i)+"   " , cv2.arcLength(contours[i],1))#长度
    length.append(cv2.arcLength(contours[i],1))

allle = np.average(length)
print(allle)
cv2.imshow("gray",gray0)
cv2.imshow("binary",dst)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

#显示
contoursimg0    808.0
contoursimg1    796.0
contoursimg2    1695.0
contoursimg3    1692.0
contoursimg4    6389.0

contoursimg长度0    108.76955187320709
contoursimg长度1    107.94112479686737
contoursimg长度2    179.5979790687561
contoursimg长度3    179.59797883033752
contoursimg长度4    544.8528124094009
224.1518893957138

在这里插入图片描述

形状匹配

import cv2
import numpy as np
img1 = cv2.imread("C:\\AppData\\image\\002.jpg",1)
img2 = cv2.imread("C:\\AppData\\image\\005.jpg",1)
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#色彩空间转化
gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)
ret,binary2 = cv2.threshold(gray2,127,255,cv2.THRESH_BINARY)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
contours2,hierarchy = cv2.findContours(binary2,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
#print(len(contours1))11
#print(len(contours2))4
ret1 = cv2.matchShapes(contours1[0],contours1[1],1,0.0)###结果越小越相似
print(ret1)
cv2.imshow("gray0",gray0)
cv2.waitKey()
cv2.destroyAllWindows()

轮廓拟合

import cv2#矩形
import numpy as np
img1 = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY_INV)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
x,y,w,h = cv2.boundingRect(contours1[0])
brcnt = np.array([[[x,y]],[[x+w,y]],[[x+w,y+h]],[[x,y+h]]])
cv2.drawContours(img1,[brcnt],-1,(0,255,255),2)
#cv2.rectangle(img1,(x,y),(x+w,y+h),(0,0,255),2)
cv2.imshow("img1",img1)
print(len(contours1))
cv2.waitKey()
cv2.destroyAllWindows()


import cv2#最小矩形
import numpy as np
img1 = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY_INV)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
rect = cv2.minAreaRect(contours1[0])#
points = cv2.boxPoints(rect)#转化为drawContours可用的格式
points = np.int0(points)#取整
x,y,w,h = cv2.boundingRect(contours1[0])
brcnt = np.array([[[x,y]],[[x+w,y]],[[x+w,y+h]],[[x,y+h]]])
cv2.drawContours(img1,[points],0,(0,255,255),2)
#cv2.rectangle(img1,(x,y),(x+w,y+h),(0,0,255),2)
cv2.imshow("img1",img1)
print(len(contours1))
cv2.waitKey()
cv2.destroyAllWindows()

import cv2#圆
import numpy as np
img1 = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY_INV)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
(x,y),radius = cv2.minEnclosingCircle(contours1[0])
center = (int(x),int(y))
radius = int(radius)
cv2.circle(img1,center,radius,(0,0,255),2)
cv2.imshow("img1",img1)
print(len(contours1))
cv2.waitKey()
cv2.destroyAllWindows()


ellipse = cv2.fitEllipse(contours1[0])#椭圆
cv2.ellipse(img1,ellipse,(0,255,0),2)

import cv2#画线
import numpy as np
img1 = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY_INV)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
rows,cols = img1.shape[:2]
[vx,vy,x,y] = cv2.fitLine(contours1[0],cv2.DIST_L2,0,0.01,0.01)
lefty = int((-x*vy/vx)+y)
righty = int(((cols-x)*vy/vx)+y)
cv2.line(img1,(cols-1,righty),(0,lefty),(0,255,255),2)
cv2.imshow("img",img1)
print(len(contours1))
cv2.waitKey()
cv2.destroyAllWindows()

area,trgl = cv2.minEnclosingTriangle(contours1[0])#最小外包三角形
for i in range(0,3):
    cv2.line(img1,tuple(trgl[i][0]),tuple(trgl[(i+1)%3][0]),(0,0,255),2)
cv2.imshow("img",img1)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import cv2#逼近多边形
import numpy as np
img1 = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY_INV)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
adp = img1.copy()
epsilon = 0.1*cv2.arcLength(contours1[0],True)
approx = cv2.approxPolyDP(contours1[0],epsilon,True)
cv2.drawContours(adp,[approx],0,(0,0,225),2)
cv2.imshow("0.1",adp)

adp = img1.copy()
epsilon = 0.09*cv2.arcLength(contours1[0],True)
approx = cv2.approxPolyDP(contours1[0],epsilon,True)
cv2.drawContours(adp,[approx],0,(0,0,225),2)
cv2.imshow("0.09",adp)

adp = img1.copy()
epsilon = 0.02*cv2.arcLength(contours1[0],True)
approx = cv2.approxPolyDP(contours1[0],epsilon,True)
cv2.drawContours(adp,[approx],0,(0,0,225),2)
cv2.imshow("0.02",adp)

adp = img1.copy()
epsilon = 0.01*cv2.arcLength(contours1[0],True)
approx = cv2.approxPolyDP(contours1[0],epsilon,True)
cv2.drawContours(adp,[approx],0,(0,0,225),2)
cv2.imshow("0.01",adp)
#cv2.imshow("img",img1)
print(len(contours1))
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

import cv2#凸包
import numpy as np
img1 = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY_INV)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
hul1 = cv2.convexHull(contours1[0])
cv2.polylines(img1,[hul1],True,(0,0,200),2)
cv2.imshow("img",img1)

cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#凸缺陷最低点
import numpy as np
img1 = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY_INV)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
hul1 = cv2.convexHull(contours1[0],returnPoints = False)
defects = cv2.convexityDefects(contours1[0],hul1)
for i in range(defects.shape[0]):#线段条数
    s,e,f,d = defects[i,0]#开始、结束点的索引,距离线段最远,最近的点
    start = tuple(contours1[0][s][0])#线段起点位置
    end = tuple(contours1[0][e][0])#线段终点位置
    far = tuple(contours1[0][f][0])#最远点的位置
    cv2.line(img1,start,end,(0,0,255),2)#画线段
    cv2.circle(img1,far,5,[255,0,0],-1)#画圆点
#cv2.polylines(img1,[hul1],True,(0,0,200),2)
cv2.imshow("img",img1)

cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#几何学测试
import numpy as np
img = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
contours,hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
image = img.copy()
hull = cv2.convexHull(contours[0])#求外围的点
cv2.polylines(image,[hull],True,(0,255,255),2)
print("isn't a ao   ",cv2.isContourConvex(hull))#

image1 = img.copy()#逼近多边形
epsilon = 0.01*cv2.arcLength(contours[0],True)
approx = cv2.approxPolyDP(contours[0],epsilon,True)
cv2.drawContours(image1,[approx],0,(0,0,225),2)
cv2.imshow("0.002",image1)

cv2.waitKey()
cv2.destroyAllWindows()
import cv2#几何学测试
import numpy as np
img = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
contours,hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

hull = cv2.convexHull(contours[0])
image = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
cv2.polylines(image,[hull],True,(0,255,0),2)#画hull
distA = cv2.pointPolygonTest(hull,(300,150),True)#求点的参数
font = cv2.FONT_HERSHEY_SIMPLEX#字体选择
cv2.putText(image,'A',(300,150),font,1,(0,0,255),2)#打印文字
print("dist= ",distA)
cv2.imshow("img",image)
cv2.waitKey()
cv2.destroyAllWindows()

import cv2#矩形轮廓宽高比
import numpy as np
img = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
contours,hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
x,y,w,h = cv2.boundingRect(contours[0])
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
aspectRatio = float(w)/h
print("   ",aspectRatio)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()


import cv2#轮廓面积比矩形面积
import numpy as np
img = cv2.imread("C:\\AppData\\image\\006.jpg",1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#色彩空间转化
ret,binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
contours,hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
x,y,w,h = cv2.boundingRect(contours[0])
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.drawContours(img,contours[0],-1,(0,0,255),2)
rectArea = w*h
outArea = cv2.contourArea(contours[0])
extend = float(outArea)/rectArea
aspectRatio = float(w)/h
print("   ",extend)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()


hull = cv2.convexHull(contours[0])
hullArea = cv2.contourArea(hull)
cv2.polylines(img,[hull],True,(255,0,0),2)

look
在这里插入图片描述

直方图

import cv2#直方图
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:\\AppData\\image\\120.jpg",0)
img1 = cv2.imread("C:\\AppData\\image\\120.jpg",1)
img2 = cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
equ = cv2.equalizeHist(img)

#cv2.imshow("img",img)
#cv2.imshow("equ",equ)

plt.figure("img")
plt.subplot(121),plt.hist(img.ravel(),256)
plt.subplot(122),plt.hist(equ.ravel(),256)
plt.figure("img1")
plt.imshow(img2)

cv2.waitKey()
cv2.destroyAllWindows() 

在这里插入图片描述

傅里叶变换

import cv2#频域
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:\\AppData\\image\\100.jpg",0)
f = np.fft.fft2(img)#二维傅里叶转化
fshift = np.fft.fftshift(f)#0频置中

ishift = np.fft.ifftshift(fshift)#逆运算
iimg = np.fft.ifft2(ishift)#逆运算
iimg = np.abs(iimg)#有复数
magnitude_spectrum = 20*np.log(np.abs(fshift))#
plt.subplot(121)#
plt.imshow(img,cmap = 'gray')
plt.title("ori")
plt.axis('off')
plt.subplot(122)
plt.imshow(magnitude_spectrum,cmap = 'gray')
plt.title("result")
plt.axis('off')
plt.show()
plt.figure("img1")
plt.imshow(iimg,cmap = 'gray')
#cv2.imshow("pu",magnitude_spectrum)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#傅里叶高通滤波
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:\\AppData\\image\\100.jpg",0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)

rows,cols = img.shape
row,col = int(rows/2),int(cols/2)
fshift[row-50:row+50,col-50:col+50] = 0 #使低频率的值为零而显示黑色

ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
magnitude_spectrum = 10*np.log(np.abs(fshift))
plt.subplot(121)
plt.imshow(img,cmap = 'gray')
plt.title("ori")
plt.axis('off')
plt.subplot(122)
plt.imshow(magnitude_spectrum,cmap = 'gray')
plt.title("result")
plt.axis('off')
plt.show()
plt.figure("img1")
plt.imshow(iimg,cmap = 'gray')
#cv2.imshow("pu",magnitude_spectrum)
img2 = np.abs(img-iimg)
ret,binary1 = cv2.threshold(img2,2,255,cv2.THRESH_BINARY)
#cv2.imshow("im01",binary1)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#opencv实现傅里叶功能同上
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:\\AppData\\image\\100.jpg",0)
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)#利用cv进行傅里叶
dftshift = np.fft.fftshift(dft)#用numpy将0频置中
rows,cols = img.shape
cow,col = int(rows/2),int(cols/2)
mask = np.zeros((rows,cols,2),np.uint8)
mask[row-30:row+30,col-30:col+30] = 1
fshift = dftshift*mask#将部分置0
ishift = np.fft.ifftshift(fshift)#逆中转
iimg = cv2.idft(ishift)
iimg = cv2.magnitude(iimg[:,:,0],iimg[:,:,1])# 逆转图像
plt.subplot(121),plt.imshow(img,cmap = 'gray'),plt.title('original'),plt.axis('off')
plt.subplot(122),plt.imshow(iimg,cmap = 'gray'),plt.title('inverse'),plt.axis('off')
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:\\AppData\\image\\2.jpg",0)
template = cv2.imread("C:\\AppData\\image\\22.jpg",0)
th,tw = template.shape[::-1]
rv = cv2.matchTemplate(img,template,cv2.TM_SQDIFF)
minVal,maxVal,minLoc,maxLoc = cv2.minMaxLoc(rv)
topLeft = minLoc
print(topLeft)
bottomRight = (topLeft[0]+tw,topLeft[1]+th)
cv2.rectangle(img,topLeft,bottomRight,255,5)

plt.subplot(121),plt.imshow(img,cmap = 'gray'),plt.title('original'),plt.axis('off')
plt.subplot(122),plt.imshow(rv,cmap = 'gray'),plt.title('inverse'),plt.axis('off')
plt.show()
cv2.imshow("imh",rv)
cv2.waitKey()
cv2.destroyAllWindows()

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:\\AppData\\image\\2.jpg",0)
template = cv2.imread("C:\\AppData\\image\\22.jpg",0)
th,tw = template.shape[::-1]
rv = cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.5
loc = np.where(rv>=threshold)
for i in zip(*loc[::-1]):
    cv2.rectangle(img,i,(i[0]+th,i[1]+tw),255,1)


cv2.imshow("imh",img)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:\\AppData\\image\\007.jpg",1)
b,g,r = cv2.split(img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ishow = r.copy()
img1 = np.zeros(r.shape,np.uint8)
ret,thresh = cv2.threshold(r,160,255,cv2.THRESH_BINARY)
kernel = np.ones((3,3),np.uint8)
opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel,iterations = 3)
dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,3)
rte,fore = cv2.threshold(dist_transform,0.3*dist_transform.max(),255,0)
mask = fore[:,:] >0
img1[mask] = 255
contours1,hierarchy = cv2.findContours(img1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
print(len(contours1))
cv2.imshow("img",r)
cv2.imshow("dist_transform",dist_transform)
cv2.imshow("fore",fore)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2#读取视频
import numpy as np
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
    ret,frame = cap.read()
    frame = cv2.Canny(frame,90,220)
    cv2.imshow('frame',frame)
    c = cv2.waitKey(100)
    if c == 27:
        break
cap.release()
cv2.destroyAllWindows()

学习书籍 —《Opencv 轻松入门:面向python》

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值