opencv中的一些用法积累(不断更新)

opencv中的一些用法积累(不断更新)

cv2.split(img)

这个是相当于是获得其中的每个通道 比如

>>> img = cv2.imread("1.jpg")
>>> img.shape
(480, 640, 3)
>>> cv2.split(img)
[array([[  2,   0,   3, ...,  32,  31,  37],
       [  8,   0,   5, ...,  25,  27,  32],
       [  9,   0,   5, ...,  34,  23,  16],
       ...,
       [140, 142, 147, ...,  14,   9,   7],
       [140, 143, 150, ...,  10,   7,   8],
       [137, 140, 146, ...,  10,   7,   9]], dtype=uint8), array([[ 19,   4,   3, ...,  33,  22,  23],
       [ 17,   5,   6, ...,  21,  22,  27],
       [  7,   0,   4, ...,  24,  21,  20],
       ...,
       [112, 111, 114, ...,  12,  14,  19],
       [112, 112, 117, ...,  13,  13,  17],
       [110, 111, 115, ...,  16,  13,  15]], dtype=uint8), array([[16,  3,  3, ..., 24, 18, 24],
       [ 4,  0,  0, ..., 16, 21, 28],
       [ 6,  1, 13, ..., 24, 21, 21],
       ...,
       [77, 78, 81, ..., 18, 17, 21],
       [78, 79, 84, ..., 21, 18, 20],
       [76, 80, 84, ..., 23, 18, 20]], dtype=uint8)]
>>> ret = cv2.split(img)
>>> len(ret)
3
>>> ret[0].shape
(480, 640)

cv2.merge([img1,img2,img3])

这个和上面的刚好是相反的,即把各个通道的给merge起来。

上面的两个函数splitmerge就可以实现一些算法,比如随机的对图像的通道进行交换。因为就6种情况,所以比较容易。

cv2.line() 用来画线

见下面的代码

import cv2 
import matplotlib.pyplot as plt 

import numpy as np

img  = cv2.imread("1.jpg")

cv2.line(img, (10,10), (10,300), (0,255,0), 2)
cv2.line(img, (10,300), (300,300),(0,255,0), 2)
cv2.line(img,(300,300),(300,10), (0,255,0), 2)
cv2.line(img,(300,10),(10,10), (0,255,0), 2)

plt.imshow(img[...,::-1])
plt.show()
~                                                                                                               

要注意的是cv和plt之间要转通道,并且上面的第一条画的是竖着的。

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦