YDYの博客

一只有理想的菜鸟

基本图形绘制 & 图像运算

  • 绘制图形
  • 鼠标事件
  • 图像运算

绘制图形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import cv2
import numpy as np

img=np.zeros((480,640,3),np.uint8)

cv2.line(img,(0,100),(200,300),(255,0,0),5,16)
cv2.rectangle(img,(10,10),(100,100),(0,0,255))


cv2.circle(img,(300,200),40,(255,0,0),5)

cv2.putText(img,'hello world',(100,100),cv2.FONT_HERSHEY_SIMPLEX,3,(255,0,0),1)

cv2.imshow('shape', img)

cv2.waitKey(0)
cv2.destroyAllWindows()

QQ截图20240321104002.png

鼠标事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cv2
import numpy as np

img=np.zeros((480,640,3),np.uint8)

def mouse_event(event,x,y,flags,userdate):
print(event,x,y,flags,userdate)

cv2.namedWindow('shape',cv2.WINDOW_NORMAL)
cv2.setMouseCallback('shape',mouse_event,"123")

# cv2.line(img,(0,100),(200,300),(255,0,0),5,16)
# cv2.rectangle(img,(10,10),(100,100),(0,0,255))
# cv2.circle(img,(300,200),40,(255,0,0),5)
# cv2.putText(img,'hello world',(100,100),cv2.FONT_HERSHEY_SIMPLEX,3,(255,0,0),1)

cv2.imshow('shape', img)

cv2.waitKey(0)
cv2.destroyAllWindows()

QQ截图20240321113803.png

图像运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import numpy as np
import cv2
img=cv2.imread('./test2.png')
print(img.shape)

img2=np.zeros((216,317,3),np.uint8)
img2[100:200, 200:300]=(255,255,255)
img2[:,:]=(50,50,50)
# newImg=cv2.add(img,img2) # 加法 增加曝光效果
newImg=cv2.subtract(img,img2) # 减法 变得更暗

cv2.imshow('img2',img2)
cv2.imshow('img',img)
cv2.imshow('newImg',newImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 加法
    QQ截图20240321113638.png

  • 减法
    QQ截图20240321113658.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import cv2
img=cv2.imread('./test2.png')
print(img.shape)

img2=np.zeros((216,317,3),np.uint8)

# img2[100:200, 200:300]=(255,255,255)
# img2[:,:]=(50,50,50)
# newImg=cv2.add(img,img2) # 加法 增加曝光效果
# newImg=cv2.subtract(img,img2) # 减法 变得更暗
img2[:,:]=(2,2,2)
newImg=cv2.multiply(img,img2) # 乘法

cv2.imshow('img2',img2)
cv2.imshow('img',img)
cv2.imshow('newImg',newImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 乘法

QQ截图20240328101617.png

图像位运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cv2
import numpy as np

img = np.zeros((200,200),np.uint8)
img2 = np.zeros((200,200),np.uint8)

img[20:120,20:120] = 255
img2[80:180,80:180] = 255

# newImg = cv2.bitwise_and(img,img2) # 与
# newImg = cv2.bitwise_or(img,img2) # 或
newImg = cv2.bitwise_xor(img,img2) # 异


cv2.imshow('img',img)
cv2.imshow('img2',img2)
cv2.imshow('newImg',newImg)

cv2.waitKey(0)
cv2.destroyAllWindows()

QQ截图20240328103142.png

QQ截图20240328103747.png

QQ截图20240328104102.png

添加水印

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import cv2
import numpy as np

img=cv2.imread('./test.png')

# logo = np.zeros((200,200,3),np.uint8)
logo = cv2.imread('./logo.png')
mask = np.zeros((200,200),np.uint8)
logogray = cv2.cvtColor(logo,cv2.COLOR_BGR2GRAY)
ret,mask = cv2.threshold(logogray,10,255,cv2.THRESH_BINARY)

notM = cv2.bitwise_not(mask)
roi = img[0:142,0:142]
temp = cv2.bitwise_and(roi,roi,mask=notM)
dst = cv2.add(temp,logo)

cv2.imshow('notM',notM)
cv2.imshow('roi',roi)
cv2.imshow('temp',temp)
cv2.imshow('dst',dst)

img[0:142,0:142] = dst
cv2.imshow('img',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

QQ截图20240328113609.png

图像修复

1
2
3
4
5
6
7
8
9
10
11
import cv2
import numpy as np

img = cv2.imread('./inpaint2.png')
mask = cv2.imread('./inpaint.png',0)

dst =cv2.inpaint(img, mask, 20, cv2.INPAINT_TELEA)
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()

QQ20240411105454.png

图像滤波

1
2
3
4
5
6
7
8
9
10
import cv2
import numpy as np

img = cv2.imread('./opencvGaussian.png')
dst = cv2.GaussianBlur(img, (5,5), sigmaX=100)

cv2.imshow("src",img)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

QQ20240422150557.png