img
=
cv2
.
imread
(
image_file
)
得到的img是一个三维numpy数组,如果image_file文件是黑白图像,那维度是(w, h, 1),如果是彩色图像,那维度是(w, h, 3)
3、将numpy数组转成图片保存
new_im = cv2.imwrite("im_save.png", img)
# PIL => OpenCV
img = image.load_img(img_path)
img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)
# OpenCV => PIL
img = cv2.imread(img_path)
img = Image.fromarray(cv2.cvtColor(img, c...
import scipy.misc
misc.imsave('out.jpg', image_array)
上面的scipy版本会标准化所有图像,以便min(数据)变成黑色,max(数据)变成白色。如果数据应该是精确的灰度级或准确的RGB通道,则解决方案为:
import scipy.misc
misc.toimage(image_array, cmin=0.0, cmax=...).save('outfile.jpg')
第二种方案
使用PIL。
给定一个numpy数组”A”:
from PIL import Image
Python OpenCV存储图像使用的是Numpy存储,所以可以将Numpy当做图像类型操作,操作之前还需进行类型转换,转换到int8类型
import cv2
import numpy as np
# 使用numpy方式创建一个二维数组
img = np.ones((100,100))
# 转换成int8类型
img = np.int8(img)
# 颜色空间转换,单通道转换成多通道, 可选...
opencv的数据格式就是用numpy unit8 格式存储的。两者之间可以相互装换;
想用imshow格式输出,array格式一定用转换为uint8的格式。用array.astype(np.uint8)强制转换为uint8的格式。
对于彩色图像有三个通道,每一个通道都是一样的操作,最后用cv2.merge(r,g,b)函数将三个通道的值何在一起就行。
import cv2 as cv
import numpy as np
filename = 'A.jpg'
安装教程目录前言OpenCV-Python安装教程报错解决cv2安装numpy安装opencv安装(附加)总结
首先,我知道一些看到我的Blog的人已经在网上找了很多歪路子,现在已经火冒三丈了(我也是这样过来的hhhh),那么现在,深呼吸,跟着我的教程,不要着急,每一步都要读一遍。完整安装过程需要1个小时左右(仅供参考,本人第一次安装python花了一天(确信))
OpenCV-Python...
图像的显示在python中有很多方式,但针对自己的项目,需要有不同的读取或者显示方式,又或者想把图像转换成其他类型进行处理。比如你是用opencv读取的图像,然后检测完以后是用Image.show()显示的,类似这种就需要进行转换了。
opencv读取图像并显示
opencv转Image
Image读取和显示图像
Image转numpy
Image转opencv
opencv读取图像并显示
import cv2
from PIL import Image
img = cv2.i
最近工作过程中有一个小问题,一个ROS节点要处理另一个ROS节点的图片信息,因为相机传的图片分辨率为1920*1080,造成图片较大,在ROS传输过程中造成了比较大的延时,所以想通过图片压缩将发送的图片信息变小,减少时延,经过图片压缩后最后的效果也十分明显。
具体原理是把ros中代表图片的信息sensor_msgs::Image通过cvbridge转化成opencv中的Mat数据格式,在使用Resize函数将其压缩,最后再通过cvbridge转化成sensor_msgs::Image。
具体实现函数: