opencv core operation

本文介绍了使用OpenCV进行基本图像处理的方法,包括像素提取与修改、图像区域兴趣(ROI)提取、图像通道分离与合并、图像加法运算、图像混合以及图像按位运算等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  原文

  opencv core operation

   

  看到core,心里不禁一惊。而实际上,此系列简单介绍了,图像的像素提取,ROI区域提取,图像的通道的合并分离、图像的合并等几个操作,及衡量程序的时间接口,及性能相关的SSE2指令的简单介绍。

   或许本身就是这些简单的操作构成了后续图像的复杂运算吧。

 图像的基本操作

  1. 提取修改 像素

     读取图像后,直接用像素的行 、列坐标值来获取B  G  R三种颜色的值;对于grayscale ,仅仅返回intensity.

 

>>> px = img[100,100]
>>> print px
[157 166 200]

# accessing only blue pixel
>>> blue = img[100,100,0]
>>> print blue
157

img[row,column,channel] 的含义为row 行,column列,channel通道上的值;channel的取值 0:Blue ;1 : Green ;2 :Red

  修改像素:

>>> img[100,100] = [255,255,255]
>>> print img[100,100]
[255 255 255]

上面这个直接用数组操作的方式,效率很低下,不推荐使用。numpy提供了优化的接口

  img.item 和itemset两个接口

# accessing RED value
>>> img.item(10,10,2)
59

# modifying RED value
>>> img.itemset((10,10,2),100)
>>> img.item(10,10,2)
100

   访问图像属性

     

>>> print img.shape
(342, 548, 3)

>>> print img.size
562248

>>> print img.dtype
uint8


1) shape 返回 行、列和通道数目的数组

2)如果图像是grayscale的,shape属性仅仅返回行、列信息。以此可以判断图像是彩色的还是grayscale的。

3)dtype 图像 的数据类型,在debug时非常有用。由于经常会存在类型不匹配导致的各种错误

  获取ROI

   通过Numpy 提供的索引方法来操作。

>>> ball = img[280:340, 330:390]
>>> img[273:333, 100:160] = ball

[280:340] 为垂直方向的区域,即包含从280-340的行;


330:390  即为列区域,即从330-390的列

这种方法只适合rectangular 的ROI

 

  分离、合并图像通道

 

>>> b,g,r = cv2.split(img)
>>> img = cv2.merge((b,g,r))


Or  Numpy index方法:

>>> b = img[:,:,0]


例如,将红色像素清零:

>>> img[:,:,2] = 0

split方法耗时,建议采用Numpy index方法

图像上进行数值运算

图像加法


一种是opencv的运算,为饱和(saturated)运算,即两个运算数相加,如果和超过运算数类型的最大,则两数的和为运算类型的最大值


一种是Numpy的运算,为模(modulo)运算,即两个运算数相加,如果和超过运算类型的最大值,则两数和对最大值取模为实际的和值。

对于图像运算来讲,opencv的运算方式更符合要求。

实例如下,两个8位的无符号数运算:

>>> x = np.uint8([250])
>>> y = np.uint8([10])

>>> print cv2.add(x,y) # 250+10 = 260 => 255
[[255]]

>>> print x+y          # 250+10 = 260 % 256 = 4
[4]



图像混合

addWeighted函数的运算公式为:


img1 = cv2.imread('ml.png')
img2 = cv2.imread('opencv_logo.jpg')

dst = cv2.addWeighted(img1,0.7,img2,0.3,0)

cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()


图像按位运算

  包括 与 、或、非、与非运算。这几种运算广泛应用于提取图像某一区域,处理non-rectangular

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值