机器视觉专栏(一)opencv基础操作
来源:互联网 发布:大乐透 简单公式算法 编辑:程序博客网 时间:2024/06/05 15:19
opencv是机器视觉领域的一大杀器,他比matlab友好,比matlab可扩展性强,比……。这里不再黑matlab了,下面先来谈谈opencv+python的基础操作
读取,显示,保存图像
import cv2import numpy as npa = cv2.imread("lena.jpg") #读取图像cv2.imshow("out",a) #显示图像cv2.imwrite("lenna.jpg",a) #保存图像
读取图像cv2.imread(“image path”),可以在路径后面加一个参数flag,flag等于CV_LOAD_IMAGE_GRAYSCALE时,读取的图像是灰度图像
读取某一个像素点
对于普通的BGR图像来说,读取图像后的三维数组中的第三维分别代表B,G,R通道的数值,你可以用指定行列来单独读取,修改他们
>>> a[100,100]array([ 80, 70, 176], dtype=uint8)>>> a[100,100,0]80>>> a[100,100] = [255,255,255]>>> a[100,100]array([255, 255, 255], dtype=uint8)>>>
还可以用item,itemset对一个位置的像素点进行读取和修改:
>>> a.itemset((100,100,2),100)>>> a.item(100,100,2)100
切分图像的通道:
在opencv里,可以使用cv2.spilt(img)函数来拆分图像,也可以直接访问图像矩阵某一个维度的全部像素值来实现
>>> b,g,r = cv2.split(a)>>> barray([[128, 126, 125, ..., 114, 92, 65], [127, 127, 124, ..., 120, 101, 73], [128, 125, 124, ..., 125, 105, 77], ..., [ 54, 57, 61, ..., 83, 82, 81], [ 53, 57, 62, ..., 86, 86, 86], [ 53, 57, 63, ..., 83, 84, 84]], dtype=uint8)>>> bb = a[:,:,0]>>> bbarray([[128, 126, 125, ..., 114, 92, 65], [127, 127, 124, ..., 120, 101, 73], [128, 125, 124, ..., 125, 105, 77], ..., [ 54, 57, 61, ..., 83, 82, 81], [ 53, 57, 62, ..., 86, 86, 86], [ 53, 57, 63, ..., 83, 84, 84]], dtype=uint8)
获取图像的几何信息:
使用cv2.shape会返回一个表示图像矩阵大小(宽,高,深度)的元组,使用cv2.size则会返回图像中有多少个像素:
>>> a.size786432>>> a.shape(512, 512, 3)>>>
图像之间的四则运算:
因为图像在opencv中的储存方式是一个多维矩阵,那么对于图像来说就有矩阵加减,数乘矩阵,矩阵与矩阵的乘法除法,opencv在这个方面十分方便,他重载了运算符,所以我们直接使用运算符就可以,注意,操作的矩阵大小必须一致:
import cv2import numpy as npa = cv2.imread("lena.jpg")b = cv2.imread("ll.jpg")b = cv2.resize(b,(512,512),interpolation = cv2.INTER_CUBIC)cv2.imshow("add",a+b) cv2.imshow("sub",a-b)cv2.imshow("mul1",1.2*a)cv2.imshow("mul",a*b)cv2.imshow("div",a/b) #有可能会出现除以0的错误
先来说说cv2.resize(源,目标,)这个函数,我们分参数来讲:
源:图像源
目标:输出的图像,或者输入一个大小
插值方式:
INTER_NEAREST:根据像素的相邻关系补充像素
INTER_CUBIC:立方插值
INTER_LINER:双线性插值,参数缺省时使用:
同时opencv还可以对图像进行按位运算,AND,OR,NOT,XOR,这些函数对每对对应像素进行按位操作。按位操作可以完成图像叠加之类的方便操作:
import cv2import numpy as npa = cv2.imread("lena.jpg")b = cv2.imread("ll.jpg")b = cv2.resize(b,(512,512),interpolation = cv2.INTER_LINEAR)NOT = cv2.bitwise_not(b)AND = cv2.bitwise_and(b,b)XOR = cv2.bitwise_xor(b,b)
本次介绍的是一些很基础的操作,下一次介绍基础的图像处理方法
具体的读者可以参阅一下网站
opencv python API
opencv python tutorials
- 机器视觉专栏(一)opencv基础操作
- 机器视觉OpenCV库基础教程(一)
- 计算机视觉之OpenCV教程 ---Mat类基础(一)
- 机器视觉专栏(三)图像的几何变换
- 机器视觉OpenCV库基础教程(二)
- 机器视觉OpenCV库基础教程(三)
- Swift专栏:Swift基础入门(一)
- 机器视觉基础入门
- 机器视觉基础篇
- 机器视觉学习笔记(一)
- 机器视觉光源知识总结(一)
- python机器视觉学习笔记(一)
- Deep Learning + Opencv + 机器视觉
- 无人机视觉 机器学习 opencv
- 计算机视觉篇:一:opencv的基本操作,卷积。
- 机器视觉专栏(二) 图像的颜色转换和阈值化
- 邓仰东专栏|机器学习的那些事儿(一)
- 机器视觉学习笔记(1)——OpenCV配置
- 在Windows上部署python开发环境
- Android开发,自定义View的学习合集
- CAD高版本转低版本怎么转好
- 解决输入框和按钮不在同一行的问题
- Qihoo360/RePlugin 简单项目构建
- 机器视觉专栏(一)opencv基础操作
- BZOJ 2901: 矩阵求和 前缀和
- 题目1046:求最大值
- MyBatis笔记
- Hadoop 2.7.3-Kerberos认证
- androidstudio Parcelable
- 动态内存开辟(malloc calloc realloc)
- 关于dorado studio5.4启动后未自动打开浏览器问题解决
- 关于spring cloud