机器视觉专栏(一)opencv基础操作

opencv是机器视觉领域的一大杀器,他比matlab友好,比matlab可扩展性强,比……。这里不再黑matlab了,下面先来谈谈opencv+python的基础操作

读取,显示,保存图像

import cv2
import numpy as np

a = 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)
>>> b
array([[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]
>>> bb
array([[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.size
786432
>>> a.shape
(512, 512, 3)
>>> 

图像之间的四则运算:

因为图像在opencv中的储存方式是一个多维矩阵,那么对于图像来说就有矩阵加减,数乘矩阵,矩阵与矩阵的乘法除法,opencv在这个方面十分方便,他重载了运算符,所以我们直接使用运算符就可以,注意,操作的矩阵大小必须一致:

import cv2
import numpy as np

a = 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 cv2
import numpy as np

a = 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

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值