1:读入图像,显示图像与保存图像


代码:

import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
cv2.namedWindow('lena',cv2.WINDOW_AUTOSIZE)
cv2.imshow('lena',img)
k=cv2.waitKey(0) if k==27:
cv2.destroyAllWindows()
plt.close()
elif k==ord('s'):
cv2.imwrite('lenagray.png',img)
cv2.destroyAllWindows()

效果:

2:另一种显示方法


利用matplotlib去显示图像。

import cv2
from matplotlib import pyplot as plt
img=cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
plt.imshow(img)
plt.show()

效果:

问题来了,为什么显示的颜色与原图不同呢?

后来网上搜索后才知道,对于opencv的像素是BGR顺序,然而matplotlib所遵循的是RGB顺序。

opencv的一个像素为:[B,G,R] ,matplotlib的一个像素为:[R,G,B]。这就是为什么本来发红的区域变得有些发蓝了。

解决方法:

解决方法有很多。

import numpy as np
import cv2
from matplotlib import pyplot as plt img=cv2.imread('lena.jpg',cv2.IMREAD_COLOR) #method1
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
plt.imshow(img2)
plt.show() #method2
img3=img[:,:,::-1]
plt.imshow(img3)
plt.show() #method3
img4=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img4)
plt.show()

效果:

3:关于numpy的矩阵的翻转(对于上述的方法2的说明)


上述方法2正是利用了numpy对数组的翻转。举例说明。

我仿照图片的像素格式,建立一个2行3列的,每个像素有包含RGB3个元素。

分别进行图中所示的4种运算。

执行a[:-1],移除了后面的一行。对于一维数组,后面的一行其实就是最后一个元素,所以这个运算就是移除最后一个元素。

执行a[::-1],上下两行交换了。同样的看成一维数组的话,一行就是一个元素,这个运算其实就是对一个一维数组内的元素前后对调。多维数组可以理解成对对第一个方括号内的每一个元素前后对调。

执行a[:,::-1],每一行中的元素前后交换了。简单理解就是对第二层反括号内的元素前后对调。

执行a[:,:,::-1],这样就好理解了,肯定是对第三层方括号内的元素对调。这也就解释了,对于一个24位深度的图像执行这个操作的话,是对每个像素的RGB进行对调。

对于图像而言,a[::-1],a[:,::-1],a[:,:,::-1]上述的三种方法分别是X轴的镜像,Y轴的镜像,BGR转换为RGB的操作。

示例:

OpenCV与Python之图像的读入与显示以及利用Numpy的图像转换的更多相关文章

  1. CentOS+OpenCV图像的读入、显示

    以管理员身份运行su root输入密码 定位到自己的桌面目录 gedit 1.cpp 编辑内容 #include<opencv2/opencv.hpp>using namespace cv ...

  2. 使用OpenCV和Python进行人脸识别

    介绍 人脸识别是什么?或识别是什么?当你看到一个苹果时,你的大脑会立刻告诉你这是一个苹果.在这个过程中,你的大脑告诉你这是一个苹果水果,用简单的语言来说就是识别.那么什么是人脸识别呢?我肯定你猜对了. ...

  3. 教你用OpenCV 和 Python给证件照换底色(蓝底 <->红底->白底)

    在我们的生活中常常要用到各种底色要求的证件电子照,红底.蓝底.或者白底,而假如你手上只有一种底色的证件照,你又不想再去拍又不会PS怎么办?今天教你们用OpenCV和Python给你的证件照换底色. P ...

  4. 使用python开启你的opencv之旅---图像的读入,存储

    python的便捷是如此的引人着迷,而opencv给python提供的接口使我们能够使用python来快速验证我们的想法,或者与别的模块快速结合,在这个系列文章我会通过jupyter notebook ...

  5. Opencv怎么读入,显示,保存图像-OpenCV步步精深

    怎么读入图像呢? 我们用 img = cv2.imread('图像路径\原图像名称',0) 原图像名称要有后缀 .png , .jpg等等原图像带有的后缀. 这里我们着重说明一下图像路径,这个路径一定 ...

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

    原文地址:http://blog.csdn.net/sunny2038/article/details/9057415 转载请详细注明原作者及出处,谢谢! 本文是OpenCV  2 Computer ...

  7. openCV for python的使用

    一.openCV简介 OpenCV是一个开源的跨平台计算机视觉库.它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和 ...

  8. OpenCV成长之路 01、图像的读写与显示

    一.工具篇 工欲善其事,必先利其器.学习OpenCV,肯定少不于基本的编程工具与OpenCV库.在Windows平台下你可以选择Visual Studio.CodeBlock等,当然你也可以选择在Li ...

  9. 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

    基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢 ...

随机推荐

  1. 解题:CQOI 2017 老C的方块

    题面 看起来很像网络流的二分图套路题,然后我们大力观察(题目定义的相邻我用引号括起来,应该能看懂) 发现“相邻”的一对方格如果各自连着一个一个方格就gg了,于是对于所有这些“相邻”的方格,我们有两种选 ...

  2. set.seed(7)什么意思

    以前虽然在每个程序都看见过,但是没注意过这个问题,也不理解是什么意思,去搜了一些帖子才明白. 其实,很好理解,就是如果你不加set.seed(7),当然代码也可以执行这个命令,但是每次执行的结果都会不 ...

  3. Kubernetes PV/PVC使用实践

    转载于https://www.cnblogs.com/ericnie/p/7733281.html   pv,pvc的概念不解释了,之前在registry中已经使用过PV和PVC,现在想把WebLog ...

  4. redis 新开端口号

    2012 ps aux | grep redis 2013 cd /usr/local/redis/ 2014 ls 2015 cd etc/ 2016 ls 2017 cp redis.conf r ...

  5. sort 与 sorted 区别

    sort 与 sorted 区别: sort 只是应用在 list 上的方法,(就地排序无返回值). sorted 是内建函数,可对所有可迭代的对象进行排序操作,(返回新的list). 语法 sort ...

  6. Java6的新特性

    原文出处:xixicat 序 本文梳理了下java6的新特性,相对于java5而言,java6的特性显得少些,分量也不那么重,相当于java5是windows xp,java6有点像vista. 特性 ...

  7. tensorflow变量作用域(variable scope)

    举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时候共享变量会无比复杂. 官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望 ...

  8. Hadoop基础-HDFS的API实现增删改查

    Hadoop基础-HDFS的API实现增删改查 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客开发IDE使用的是Idea,如果没有安装Idea软件的可以去下载安装,如何安装 ...

  9. 如何在Mongodb中实现数据超时自动删除功能?

    在工作过程中,我们难免会遇到这样的问题,我们想保存一些数据,但是我们对这些数据的要求并不高,有时候往往只是想要某个时间范围内的数据,比如我们如果永远只关心从当前时间往前推半年内的数据特性,那么我们就不 ...

  10. 贪心问题:区间覆盖 POJ 2376 Cleaning Shift

    题目:http://poj.org/problem?id=2376 题意:就是 N 个区间, 输入 N 个区间的 [begin, end],求能用它们覆盖区间[1,T]的最小组合. 题解: 1. 首先 ...