OpenCV-Python 学习(二) OPENCV 中核心操作

一,图像的基础操作

1,获取并修改像素值

获取(速度比较慢)

px=img[100,100]
print px
blue=img[100,100,0]
print blue

修改

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

另一种更好的方法(使用numpy)速度会更快

print img.item(10,10,2)
img.itemset((10,10,2),100)
print img.item(10,10,2)

2,获取图像的属性

img.shape 行列通道

img.size 像素数目

img.dtype 数据类型

注释:常用编码 # -*- coding: utf-8 -*-

3,图像ROI

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

4,拆分以及合并图像通道

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

或者

bgr

b=img[:,:,0]   蓝色通道

img[:,:,2]=0          红色通道置0

5,图像填充

BLUE=[255,0,0]
img1=cv2.imread('opencv_logo.png')
replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()

参数:img1输入图像 10,10,10,10是对应边界像素数目,边界类型(有颜色常数,镜像...)

二,图像上的算数运算

1,图像加法

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]

OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法
是一种饱和操作,而 Numpy 的加法是一种模操作。

2.图像混合

import cv2
import numpy as np
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.destroyAllWindow()

3,按位运算

AND,OR,NOT,XOR

三,程序优化

1,检测程序效率

import cv2
import numpy as np
e1 = cv2.getTickCount()
# your code execution
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()

2,优化

使用函数 cv2.useOptimized()
来查看优化是否被开启了,使用函数 cv2.setUseOptimized() 来开启优化

原文地址:https://www.cnblogs.com/nku-wangfeng/p/8941675.html