分别是行数、列数、通道数
如果是灰度图像只返回行数和列数
img.size返回图像的像素数
img.dtype返回图像的数据类型
由于python中经常出现数据不一致的情况,所以dtype函数很有用
图像ROI
有时需要找到图片中特定区域的位置,例如在图片中寻找眼睛,首先要找到人脸,然后再找眼睛
ROI是使用numpy下标获取的,此处选择球的部分并把球拷贝到另一个图片当中
复制好的结果
import cv2
import numpy as np
img=cv2.imread('2.jpg')
ball = img[280:340, 330:390]
img[273:333, 100:160] = ball
分割和合并图像通道
图片的BGR通道可以被分割成单个的通道,对于每个单个的通道可以合并到一起,再次组成BGR
分割
b,g,r = cv2.split(img)
或者使用python中的切片
b = img[:,:,0]#获取蓝色部分
注意split比较耗时
为图像添加边界(填充)
如果想给图片添加一个边界,类似相框一样,可以使用cv2.copyMakeBorder() 函数
但是这个功能还有更多的利用价值,例如卷积运算或者0填充等等
参数如下:
样例代码
import cv2
import matplotlib.pyplot as plt
import numpy as np
BLUE = [255,0,0]
img1 = cv2.imread('2.jpg')
replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
原图:
结果如下图所示:
matplotlib绘制,顺序是RGB,蓝色和红色调换
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |