本文目录一览:
- 1、读取图片
- 2、opencv实现图像二值化时总是在如下代码最后三四行出现中断是怎么回事啊?不是三通道可以转化为单通道吗。
- 3、怎么用opencv和python,只保留深蓝色部分,其他区域变为黑色
- 4、opencv三通道的iplimage怎么转为单通道
- 5、数据集是Kinect获取的三通道深度图,怎么变成单通道且无信息损失?
读取图片
python基础——读取图片
图像后缀名的转换:
要注意的是:对于彩色图像,不管其格式是png,还是bmp,或者jpg,
在PIL中 ,使用Image模块的open()函数打开后,返回的图像对象的模式都是 RGB ,对于灰度图像,不管其图像格式是PNG,还是BMP,JPG,打开后,其模式为灰度L。
PNG BMP JPG彩色图像格式之间的转换:可以通过Image模块的open函数和save函数,具体来说,在打开这些图像时,PIL会将他们解码成三通道的RGB图像。用户可以基于RGB进行处理。处理完毕后可以将其处理结果保存成PNG BMP JPG中任何格式。
PNG BMP JPG灰度图像格式之间的转换,同理也可以通过类似途径,只是解码后时模式为L的图像。
python库可以用来读取图片的库
1. PIL.Image.open
无论是jpg还是png都能准确读取,PIL.Image.open 不直接返回numpy对象,可以用numpy提供的函数进行转换;
其他模块都直接返回numpy.ndarray对象,通道顺序为RGB,通道值得默认范围为0-255。
拓展:
利用PIL中的Image函数读取出来不是array格式,这时候需要用np.asarray() 或者np.array()函数 。
区别:np.array() 是深拷贝,np.asarray() 是浅拷贝
关于深拷贝和浅拷贝,这里给出一个说明:
Python 中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
一个很好的例子:
2. cv2.imread
使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255
cv2.imread():读入图片,共两个参数:第一个参数为要读入的图片文件名,第二个参数为如何读取图片(cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:灰度图片;cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道。)
cv2.imread()不能有中文路径,否则读取不出来
cv2.imread() 读出来同样是array形式,但是如果是单通道的图,读出来的是三通道的。
3. matplotlib.image.imread
用于显示图片matplotlib 用于读取图片并且读取出来就是array格式
解决使用plt.savefig 保存图片时一片空白 : 在plt.show() 之前调用 plt.savefig();
4. scipy.ndimage.imread
scipy.ndimage.imread(*args, **kwds) Use ``matplotlib.pyplot.imread`` instead.
Returns:imread:ndarray(多维数组)
5. scipy.misc.imread
scipy.misc.imread(name, flatten=False, mode=None)
Use ``imageio.imread`` instead.
返回:imread: ndarray。通过读取图像获得的阵列 。读出来是array 形式,并且按照(H,W,C)形式保存
4. skimage.io.imread
scikit-image和numpy,matplotlib,scikit-learn等包都是Scipy项目的成员,通用numpy数组作为基本数据格式。在python中载入包名为skimage:所得即为numpy数组。
io.imread读出图片格式是uint8(unsigned int);value是numpy array;图像数据是以RGB的格式进行存储的,通道值默认范围0-255。
opencv实现图像二值化时总是在如下代码最后三四行出现中断是怎么回事啊?不是三通道可以转化为单通道吗。
我试过是没有问题的。建议你看一下OpenCV库是不是正确引入了。
我的是Qt开发环境,运行结果:
怎么用opencv和python,只保留深蓝色部分,其他区域变为黑色
1、首先明确深蓝的数据范围;
2、将图片转换到HSV空间,并分离三个通道为新的三个单通道图片;
3、H图片使用cvInRangeS获取“蓝”色区域的MASK。“蓝”在色度轮盘的值为240
4、同上,S图片获取色纯度大于一定值的MASK;
5、同上,V图片获取亮度在一定范围内的MASK;
6、上述三图二值化以后,做“与”运算,成为最终MASK;
7、用这个新生成的MASK去处理原图;
opencv三通道的iplimage怎么转为单通道
IplImage *imgMono,*imgClr; //得到单通道图象 imgMono=cvLoadImage( "tuxiang.bmp",0); //定义一个3通道图象 imgClr = cvCreateImage(cvSize(imgMono-width,imgMono-height), IPL_DEPTH_8U, 3); cvCvtColor(imgMono, imgClr, CV_GRAY2BGR);
数据集是Kinect获取的三通道深度图,怎么变成单通道且无信息损失?
在python中numpy是很好用的数据处理包。不了解你说的数据结构但是可以尝试把数据转成numpy的md数组格式。之后可以在数组中进行检查看是不是所有的三通道都相等。如果说这样的话那么理论上三通道和三通道代表的信息都是一样的,直接在里面切片不会影响结果。