Python-OpenCV(3)

上篇博客,写了个比较有意思的玩意,接下来几篇会写写基本的图像处理

首先我们要知道的是,cv2.imread(),读取的图像是个numpy矩阵

In [1]: import cv2

In [2]: import numpy as np

In [3]: img = cv2.imread('/home/gavinzhou/实验室/ForBlogImage/images/0.jpg', cv2.IMREAD_GRAYSCALE)

In [4]: type(img)
Out[4]: numpy.ndarray

In [5]: 

所有对如何取出图像中的点,如何对图像进行resize,如何‘扩充’图像之类的,其实就是对数组的操作,这个我就不准备说了,大家可以看我的numpy基础教程,相信大家都可以看懂的

比如,我举个例子:

Question: 如何获得一副彩色(三通道)图像的R、G、B分量 Answer: (1) 使用cv函数,cv2.split() (2) numpy数组观点,R、G、B分量就是此三维矩阵的第三、第二、第一维的分量值嘛(OpenCV读图是按照BGR读取的) 即:B = img[:, :, 0],G = img[:, :, 1],R = img[:, :, 2]

代码:

In [7]: img = cv2.imread('/home/gavinzhou/实验室/ForBlogImage/images/0.jpg', cv2.IMREAD_COLOR)

In [8]: B = img[:, :, 0]

In [9]: B.shape
Out[9]: (220, 298)

In [10]: cv2.imshow('B', B)

(python:23185): Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init()

In [11]: G = img[:, :, 1]

In [11]: R = img[:, :, 2]

结果:

相信大家已经明白我的意思了,图像的很多操作其实就是对矩阵的操作,想明白这个很多问题往往我们可以不借助cv函数,直接高效的对矩阵进行操作

图像上的算数运算

其实思想和我上面说的类似,算数运算其实就是矩阵的运算嘛

还是以一个例子说明:

Question: 实现图像的融合效果 Answer: 其实很简单,就是矩阵的加权相加就可以,公式: img = a*img1+(1-a)*img2 或者: cv2.addWeighted()

代码:

In [66]: img2=cv2.imread('/home/gavinzhou/实验室/ForBlogImage/images/3.jpg',cv2.IMREAD_COLOR)

In [67]: img1=cv2.imread('/home/gavinzhou/实验室/ForBlogImage/images/0.jpg',cv2.IMREAD_COLOR)

In [68]: print img1.shape,img2.shape
(220, 298, 3) (220, 293, 3)

In [69]: img3=cv2.resize(img1, (293,220))  # 必须大小一样才可以进行叠加,不然数组越界嘛

In [70]: print img3.shape,img2.shape
(220, 293, 3) (220, 293, 3)

In [71]: img4=cv2.addWeighted(img3,0.7,img2,0.3,0)  # 等价于0.7*img3+0.3*img2

In [72]: imshow(img4)
Out[72]: <matplotlib.image.AxesImage at 0x7fb6bf1aaa90>

In [73]: img4.shape
Out[73]: (220, 293, 3)

结果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏上善若水

004计算机图形学之多边形的扫描转换和区域填充

多边形的扫描转换是指: 把多边形的顶点表示转换为点阵表示。也就是知道多边形的边界,如何找到多边形内部的点,即把多边形内部填上颜色。

1208
来自专栏ACM算法日常

UVA297:黑白图像 Quadtrees(四分树)

四象树是每个内结点均有4个子结点的特殊四叉树,它可用于描述平面上黑白图像。平面上的黑白图像是32行×32列的正方形,每个格子称为1个象素,是最小的图像单位。正方...

1223
来自专栏大壮

iOS transform(基础)

1346
来自专栏marsggbo

softmax分类算法原理(用python实现)

逻辑回归神经网络实现手写数字识别 如果更习惯看Jupyter的形式,请戳Gitthub_逻辑回归softmax神经网络实现手写数字识别.ipynb 1 -...

5545
来自专栏用户2442861的专栏

openCV-图像算数与逻辑运算

881
来自专栏ml

由判断三一点是否在三角形内部而引发的思考.....

判断一个点是否在三角形里面(包括边界上),这个问题对于许多初学者来说,可谓是一头雾水,如何判断呢? 假如有四个点A(x0,y0),B(x1,y1),C(x2,y...

2798
来自专栏zhisheng

学习算法之路

一个搞ACM的需要掌握的算法的sheet。 第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10...

3715
来自专栏文武兼修ing——机器学习与IC设计

关于蘑菇数据集的探索分析数据集描述读取数据集直观分析——颜色鲜艳的蘑菇都有毒?相关性分析——判断各指标与毒性相关性模型训练——使用决策树模型

数据集描述 来源于kaggle的蘑菇数据集,包括毒性,大小,表面,颜色等,所有数据均为字符串类型,分析毒性与其他属性的关系 读取数据集 dataset = pd...

3506
来自专栏悦思悦读

决策树告诉你Hello Kitty到底是人是猫

Hello Kitty,一只以无嘴造型40年来风靡全球的萌萌猫,在其40岁生日时,居然被其形象拥有者宣称:HelloKitty不是猫! 2014年八月,研究 H...

3187
来自专栏小樱的经验随笔

1381 硬币游戏

1381 硬币游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 有一个简单但是很有趣的游戏。在这个游戏中有一个硬币还有一张...

2706

扫码关注云+社区