cv2读取图片之后将会产生numpy数据,图像读入的shape为:(和我们所想的
不同!)
注意事项
cv2读取图片的路径中,不要包括中文,否则会造成无法读入的问题,并且该问题不会报错;
图像加载、显示与保存
图像加载
完全英文路径
直接利用
cv2.imread(path)
即可读取之后产生数据为numpy;(numpy的属性见numpy库)
- 读取之后的shape为:
;
通道分别为:B,G,R(不是RGB);
import cv2
path = 'C:/pictures/0.jpg'
numpy_img = cv2.imread(path)
路径中包括中文
那么此时就不能够利用
cv2.imread(path)
了,这是因为ython 3.x 将系统字符编码默认为了Unicode,而opencv 读取图片函数的输入参数默认用gbk格式处理,两者存在差异。
此时可以利用cv2.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)
进行替代。import os
import cv2
path = 'C:\江上渔翁\0.jpg'
if os.path.exists(path):
npimg = cv2.imdecode(np.fromfile(path,dtype=np.uint8),-1)
print(npimg.shape)
图像显示
图像显示可以利用
cv2.imshow(name, image)
,其中:name:窗口显示时的名称;
image:图片numpy;
import cv2
path = 'C:/pictures/0.jpg'
numpy_img = cv2.imread(path)
cv2.imshow('test', numpy_img)
cv2.waitKey(0)
cv2.destroyAllWindows() // 关闭窗口
注:
cv2.waitKey(time_ms)表示等待按键操作
name即是保存的文件名,为路径;
- image为numpy格式的图片数据;
import cv2
path = 'C:/pictures/0.jpg'
numpy_img = cv2.imread(path)
cv2.imwrite('test.jpg', numpy_img)
图片数据处理
直接参考numpy的操作即可!其他操作(杂)
三通道分离及合并
三通道分离
分离三个通道,获取个通道的信息,可以利用cv2.split(image)
函数。import cv2
path = 'C:/pictures/0.jpg'
numpy_img = cv2.imread(path)
b,g,r = cv2.split(numpy_img)
合并
合并可以采用cv2.merge()
函数: ```python import cv2 path = ‘C:/pictures/0.jpg’ numpy_img = cv2.imread(path) b,g,r = cv2.split(numpy_img)
合并
merged = cv2.merge(b,g,r)
<a name="iLDPo"></a>
### 绘图
<a name="FBwse"></a>
#### 绘文字
```python
cv2.putText(img, 'string', (px,py), font, font_size, color, thickness, line_type)