博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV-Python 学习(二) OPENCV 中核心操作
阅读量:4488 次
发布时间:2019-06-08

本文共 2062 字,大约阅读时间需要 6 分钟。

一,图像的基础操作

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

你可能感兴趣的文章
java获取当前路径的几种方法
查看>>
常用的js函数
查看>>
Unity 碰撞检测 OnTriggerEnter 入门
查看>>
利用DFS求联通块个数
查看>>
总结:
查看>>
将文件写到磁盘
查看>>
spring boot 整合redis --sea 方式1
查看>>
Android Http请求方法汇总
查看>>
缓存技术PK:选择Memcached还是Redis?
查看>>
深度工作:充分使用每一份脑力
查看>>
WebService学习笔记系列(四)
查看>>
C# Cache的类方法
查看>>
sql注入式攻击的原理及实例分析 (转载)
查看>>
现代浏览器的工作原理
查看>>
11号团队-团队任务5:项目总结会
查看>>
CPU运行原理
查看>>
UVA529 Addition Chains
查看>>
django项目部署在Apache服务器中,静态文件路径的注意点
查看>>
Unity检查更新
查看>>
转:objective-c 协议和委托
查看>>