OpenCV+python 彩色图像通道拆分与组合并判断size,shape函数的用法与区别

1、关于python中size与shape的用法,我一直是一头雾水,今天总结下,size既可以用作属性亦可以当做函数来使用,如a.size,np.szie(a),它是用来判断数组中所有元素的个数

,而shap与size类似,既可以用作属性亦可以当做函数来使用,如b.shape,np.shape(b),他是用来判断数组的维度

2、关于图像的加载与显示,plt.imshow与cv2.imshow显示的时候会有色差的问题,因为OpenCV显示的BGR,而plt.imshow显示的是RGB

3、通道的分离与融合分别是OpenCV中的split与merge函数

4、通过scipy.misc方法将图片转换成数组格式

 1 #!/usr/bin/env python 3.6
 2 #_*_coding:utf-8 _*_
 3 #@Time    :2019/12/25 21:42
 4 #@Author  :控制工程小小白
 5 #@FileName: RGB_split_merge.py
 6
 7 #@Software: PyCharm
 8 from PIL import Image
 9 import cv2
10 from scipy import misc
11 from matplotlib import pyplot as plt
12 import numpy as np
13 image_PIL=Image.open("our happy time.jpg")#打开图片
14 """判断图像类型并使用size,shape 用法"""
15 """---------------------------------------------------------------------"""
16 print(type(image_PIL))#此时的image不是数组格式,而是图片格式
17 image_numpy=misc.imread("our happy time.jpg")#通过scipy.misc方法将图片转换成数组格式
18 print(image_numpy)
19 print(type(image_numpy))#此时的输出是数组格式
20 print(np.size(image_numpy))#size既可以用作对象的属性a.size,也可以用作方法np.size(a),输出数组的元素的所有个数
21 print(image_numpy.size)
22 print(np.shape(image_numpy))#与size一样,既可以用作对象的属性a.shape,也可以用作方法np.shape(a),输出数组的维度
23 print(image_numpy.shape)
24 """---------------------------------------------------------------------------------------"""
25 """对于采用Image方法类读取并且显示图片时,下面4行一般配套使用"""
26 plt.figure(‘jiaqi‘)#打开显示的窗口并给显示的窗口命名
27 plt.imshow(image_PIL)#imshow方法显示要显示的图片,如果没有plt.show()的配套使用,将不会显示图橡
28 plt.axis(‘on‘)#显示坐标轴
29 plt.show()#与plt.imshow配套使用
30 """---------------------------------------------------------------------------"""
31 """opencv 加载与显示与保存图像"""
32 image_opencv=cv2.imread("our happy time.jpg")#是用OpenCV方法打开图像
33 cv2.namedWindow(‘our happy time.jpg‘,cv2.WINDOW_NORMAL)#创建一个显示窗口并命名
34 cv2.imshow(‘our happy time.jpg‘,image_opencv)#在这里需要注意OpenCV显示的图像与matplotlib显示的图像会有色差问题
35                                               #因为plt.show()接口是RGB,而OpenCV是BGR
36 plt.imshow(image_opencv)#注意这个是用OpenCV读取图像,但是是用matplotlib显示图像,个人觉得这个比cv2.imshow()显示效果要好
37 plt.show()
38 cv2.namedWindow(‘OpenCV_image‘,cv2.WINDOW_NORMAL)#创建一个显示窗口并命名
39 cv2.imshow(‘OpenCV_image‘,image_opencv)
40 cv2.waitKey(0)
41 k=cv2.waitKey(0)#等待键入指令
42 if k==27:#wait for ESC key to exit
43     cv2.destroyAllWindows()#销毁窗口
44 elif k==ord(‘s‘):#键入s就保存窗口
45     cv2.imwrite(‘our happy time.jpg‘,image_opencv)
46     cv2.destroyAllWindows()
47 """探索OpenCV与plt.show()显示图像的区别"""
48 b,g,r=cv2.split(image_opencv)#将图像的三个通道分开,分别是B,G,R
49 image_merge=cv2.merge([r,g,b])#将三个通道按照R,G,B顺序进行融合
50 plt.figure(‘image‘)
51 plt.subplot(231);plt.imshow(image_opencv)#显示使用OpenCV打开的图像BGR
52 plt.subplot(232);plt.imshow(image_PIL)#显示使用PIL打开的图像
53 plt.subplot(233);plt.imshow(b)#分别显示三个通道的图像
54 plt.subplot(234);plt.imshow(g)
55 plt.subplot(235);plt.imshow(r)
56 plt.subplot(236);plt.imshow(image_merge)#显示融合之后的RGB图像
57 plt.show()

输出结果:

<class ‘PIL.PngImagePlugin.PngImageFile‘>
[[[226 137 125]
[226 137 125]
[223 137 133]
...
[230 148 122]
[221 130 110]
[200 99 90]]

[[226 137 125]
[226 137 125]
[223 137 133]
...
[230 148 122]
[221 130 110]
[200 99 90]]

[[226 137 125]
[226 137 125]
[223 137 133]
...
[230 148 122]
[221 130 110]
[200 99 90]]

...

[[ 84 18 60]
[ 84 18 60]
[ 92 27 58]
...
[173 73 84]
[172 68 76]
[177 62 79]]

[[ 82 22 57]
[ 82 22 57]
[ 96 32 62]
...
[179 70 79]
[181 71 81]
[185 74 81]]

[[ 82 22 57]
[ 82 22 57]
[ 96 32 62]
...
[179 70 79]
[181 71 81]
[185 74 81]]]
<class ‘numpy.ndarray‘>
786432
786432
(512, 512, 3)
(512, 512, 3)

原文地址:https://www.cnblogs.com/hujinzhou/p/jiazhou2019_12_26.html

时间: 2025-01-05 21:24:02

OpenCV+python 彩色图像通道拆分与组合并判断size,shape函数的用法与区别的相关文章

OpenCV Python教程(1、图像的载入、显示和保存)

本文转载自 OpenCV Python教程(1.图像的载入.显示和保存)     作者 Daetalus 本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonOpenCV的配置这里就不介绍了. 注意,现在OpenCV for Python就是通过NumPy进行绑定的.所以在使用时必须掌握一些NumPy的相关知识! 图像就是一个矩阵,在OpenCV fo

使用python进行re拆分网页内容

这里简短的总结一下而不是完全的罗列python的re模块,python的re具有强大的功能,如下是一个从我们学校抓取数据然后拆分的程序,代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import httplib import urllib import re import sys reload(sys) sys.setdefaultencoding("u

python开发面向对象基础:组合&amp;继承

一,组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合      人类装备了武器类就是组合 1.圆环,将圆类实例后传给圆环类 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #circle,圆类 5 from math import pi 6 class Circle: 7 def __init__(self,radius): 8 self.radius = radius 9 def perimeter(self): 10

详解Python中的join()函数的用法

函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下:     join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串     os.path.join():  将多个路径组合后返回 一.函数说明 1.join()函数 语法:  'sep'.join(seq) 参数说明 sep:分隔符.可以为空 seq:要连接的元素序列.字符串.元组.字典 上面的语法即:以sep作为分隔符,将s

Python中的join()函数的用法

函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下:    join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串    os.path.join():  将多个路径组合后返回 一.函数说明1.join()函数 语法:  'sep'.join(seq) 参数说明sep:分隔符.可以为空seq:要连接的元素序列.字符串.元组.字典上面的语法即:以sep作为分隔符,将seq所有的元

【转】Python中的join()函数的用法

[红色为转载后新增部分] 函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join():连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串os.path.join():将多个路径组合后返回 一.函数说明 1.join()函数 语法:'sep'.join(seq) 参数说明sep:分隔符.可以为空seq:要连接的元素序列.字符串.元组.字典 上面的语法即:以sep作为分隔符,将seq所有的元

opencv error :assertion faild (src.depth()==dst.depth()&amp;&amp;src.size==dst.size)

在用到opencv中出现 opencv error :assertion faild (src.depth()==dst.depth()&&src.size==dst.size) 找这个bug找了好久,网上有这样几种说法: 1.check这两个图或者矩阵是不是初始化了 2.如果初始化了,初始化的大小是不是一样,即两者有没有相同的长宽 3.两者的depth深度是不是一样,即是不是一个是三通道的,一个是单通道的. 或者一个是单通道32位浮点类型,一个是单通道8位整形类型 还是没解决的话,那么接

PYTHON学习0011:enumerate()函数的用法----2019-6-8

python中的enumerate()函数的用法 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中,可以接手一到两个参数.ex:seq=['one','three','four']循环列表时:普通循环:为 for i in seq:print(i)效果为:onethreefour可以看到只是输出列表元素,不带下标的.加入count计数器时:count=0for i in seq:print(cou

python基础篇【第四篇】内置函数、装饰器:

一.内置函数: 对于一些python中常用的函数,python自身就已经定义了一些函数用于调用,我们就叫它内置函数!如以下都是python中内置的函数! 一些常用的内置函数具体用法: 一些常用的内置函数具体用法: 1.abs():取绝对值 1 n=abs(-2) 2 print(n) 3 4 结果: 5 2 2.all();传入可迭代的对象中,都为真才为真; Fasle: 0,None,"",[],{} ,()都为假True: 1,-1,True,有值返回真. n=all([1,2,3