python 读取图片成为一维数组_OpenCV与Python之图像的读入与显示以及利用Numpy的图像转换...

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()

效果:

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84NTc5MzkvMjAxNjExLzg1NzkzOS0yMDE2MTEyMzE2MjU0NjIzNy0xMzgzODM0NDkxLnBuZw==.jpg

2:另一种显示方法

利用matplotlib去显示图像。

import cv2

from matplotlib import pyplot as plt

img=cv2.imread('lena.jpg',cv2.IMREAD_COLOR)

plt.imshow(img)

plt.show()

效果:

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84NTc5MzkvMjAxNjExLzg1NzkzOS0yMDE2MTEyMzE2MzI0MTg5My0xMTIwNzU1ODQ2LnBuZw==.jpg

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

后来网上搜索后才知道,对于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()

效果:

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84NTc5MzkvMjAxNjExLzg1NzkzOS0yMDE2MTEyMzE2NDgwNzQyNS05MjM3NTAyMTkucG5n.jpg

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

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

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84NTc5MzkvMjAxNjExLzg1NzkzOS0yMDE2MTEyMzE2NTUzMTE5MC00NTU1NDQ3NzgucG5n.jpg

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

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

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

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

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

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

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

示例:

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84NTc5MzkvMjAxNjExLzg1NzkzOS0yMDE2MTEyMzE3MTIyMzg3OC0xNjE3NTQzMzIxLnBuZw==.jpg

CentOS+OpenCV图像的读入、显示

以管理员身份运行su root输入密码 定位到自己的桌面目录 gedit 1.cpp 编辑内容 #includeusing namespace cv ...

使用OpenCV和Python进行人脸识别

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

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

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

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

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

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

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

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

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

openCV for python的使用

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

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

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

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

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

随机推荐

Log4net入门(回滚日志文件篇)

在上一篇Log4net(日志文件篇)中,我们使用"log4net.Appender.FileAppender"将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会 ...

Android学习笔记——SQLite

该工程的功能是实现关于数据库的操作,即creat.update.insert.query.delete 调试的时候请用模拟器,用真机调试的时候进入cmd-adb shell,再进入cd data/da ...

ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象

程序代码: [HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperso ...

WebForm在JS中从Dropdownlist添加数据,在C#段读取

(1)页面设置和JS代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Def ...

ajax切换明星头像!

html部分:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值