如何从头搭建一个搜索引擎_numpy以及openCV
来源:互联网 发布:网络摄像头原理 编辑:程序博客网 时间:2024/06/06 01:16
类别:电工导C
日期:2016年11月29日
标题:numpy以及openCV
编号:6
一.NumPy:
- Numpy的主要对象为均匀的多维向量,在Numpy中一个维度称为一个axes,axes的数量称为rank
- e.g:[[1,0,0],[0,1,2]]:rank=2,第一个axis的长度为2,第二个axis的长度为3
- numpy的array的类名为ndarray,主要性质:
- ndarray.ndim:array的rank值
- ndarray.shape:array的dimensions,为一个由整数构成的tuple,如[[[1,0,0],[0,1,1]],[[0,0,0],[0,0,0]]]得到的结果为(2,2,3),shape得到的tuple的length即为ndarray.ndim
- ndarray.size:array的元素数量,数值上等于shape的tuple的各元素的积
- ndarray.dtype:元素的类型
- ndarray.itemsize:元素所占多少bytes
- ndarray.data:???
- 创建array:
- 从python的list和tuple来创建:
import numpy as np
a = np.array([2,3,4])
#a = np.array(1,2,3,4) #wrong!
>>>a
array([2,3,4])
b = np.array([1,2,3],[4,5,6])
>>>b
array([[1,2,3],[4,5,6]])
- 在创建时可以指定元素的类型:
>>>c = np.array([[1,2],[3,4]], dtype = complex)
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
- 创建0array或者单位array
>>> np.zeros( (3,4) )
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> np.ones( (2,3,4), dtype=np.int16 ) # dtype can also be specified
array([[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]],
[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]]], dtype=int16)
- 等间距的创建:
>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> np.arange(10)
array([0,1,2,3,4,5,6,7,8,9])
4.访问:name[i][j]
二.openCV
- 基本操作
- 读取一个图像
img = cv2.imread("D:\cat.jpg")
- 创建一个窗口
cv2.namedWindow("Image")
- 在窗口中显示图像
cv2.imshow("Image", img)
- 最后
cv2.waitKey (0)
#使得窗口等待响应再关闭
- 一个简单完整的例子
import cv2
img = cv2.imread("D:\\cat.jpg")
cv2.namedWindow("Image")
cv2.imshow("Image", img)
cv2.waitKey (0)
cv2.destroyAllWindows() #最后关闭窗口
- 创建一个新的图像
- 使用numpy函数
emptyImage = np.zeros(img.shape, np.uint8) #创建一个空图像
- 获得原图像的一个拷贝
emptyImage2 = img.copy();
- 保存图像
cv2.imwrite('地址',所保存的图像矩阵,[图像质量])
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
- 访问像素
img[j,i] = 255 #j,i代表行和列
#第三个参数代表通道BGR->012
img[j,i,0]= 255
img[j,i,1]= 255
img[j,i,2]= 255
- 分离,合并通道
#使用OpenCV自带的split函数
import cv2
import numpy as np
img = cv2.imread("D:/cat.jpg")
b, g, r = cv2.split(img) #得到一个数组
cv2.imshow("Blue", r)
cv2.imshow("Red", g)
cv2.imshow("Green", b)
cv2.waitKey(0)
cv2.destroyAllWindows()
#使用Numpy数组
import cv2
import numpy as np
img = cv2.imread("D:/cat.jpg")
#注意要先创建一个尺寸相同的空图像
b = np.zeros((img.shape[0],img.shape[1]), dtype=img.dtype)
g = np.zeros((img.shape[0],img.shape[1]), dtype=img.dtype)
r = np.zeros((img.shape[0],img.shape[1]), dtype=img.dtype)
b[:,:] = img[:,:,0]
g[:,:] = img[:,:,1]
r[:,:] = img[:,:,2]
cv2.imshow("Blue", r)
cv2.imshow("Red", g)
cv2.imshow("Green", b)
cv2.waitKey(0)
cv2.destroyAllWindows()
#通道合并
#使用OpenCV自带的merge函数
merged = cv2.merge([b,g,r]) #前面分离出来的三个通道
#使用NumPy的方法
mergedByNp = np.dstack([b,g,r])
#用NumPy组合的结果不能在OpenCV中其他函数使用,因为其组合方式与OpenCV自带的不一样
#e.g
merged = cv2.merge([b,g,r])
print "Merge by OpenCV"
print merged.strides
mergedByNp = np.dstack([b,g,r])
print "Merge by NumPy "
print mergedByNp.strides
#result:
>>>Merge by OpenCV
>>>(1125, 3, 1)
>>>Merge by NumPy
>>>(1, 500, 187500)
- 直方图的计算和显示
- 在python中调用OpenCV的直方图计算函数为cv2.calcHist()
#函数原型:
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) #返回hist
#e.g
#coding=utf-8
import cv2
import numpy as np
image = cv2.imread("D:/histTest.jpg", 0)
hist = cv2.calcHist([image],
[0], #使用的通道
None, #没有使用mask
[256], #HistSize 表示这个直方图分为多少份
[0.0,255.0]) #直方图柱的范围表示像素值的取值范围
阅读全文
0 0
- 如何从头搭建一个搜索引擎_numpy以及openCV
- 如何从头搭建一个搜索引擎_pylucene,分词,语言编码问题
- 如何从头搭建一个搜索引擎_css的使用
- 如何从头搭建一个搜索引擎_HTML简介和BeautifulSoup的基础使用
- 如何从头搭建一个搜索引擎_HTTP请求,hash_table,bloomFilter和python并发编程
- 如何从头搭建一个搜索引擎_简易的网页框架web.py
- 如何快速搭建一个简单图像搜索引擎
- 如何快速搭建一个简单图像搜索引擎
- Qt+OpenCV环境从头开始搭建
- 从头开始搭建一个dubbo+zookeeper平台
- 从头开始搭建一个dubbo+zookeeper平台
- 从头开始搭建一个dubbo+zookeeper平台
- 从头开始搭建一个dubbo+zookeeper平台
- 从头开始搭建一个dubbo+zookeeper平台
- 从头开始搭建一个dubbo+zookeeper平台
- 从头开始搭建一个dubbo+zookeeper平台
- 我会如何从头搭建嵌入式系统
- 如何建立一个成功的网上商店从头
- java 类型转换
- 常见的结束进程的方法
- 网络基础总结
- 数据库定期压缩
- 利用tensorflow1.2.1中的tensorboard显示数据流程图
- 如何从头搭建一个搜索引擎_numpy以及openCV
- 轻松学习python part2-控制语句
- pandas
- iOS封装浅谈-一句代码弹出actionSheet,如何优雅的设计一个ActionSheetManager
- java 二维码图片合成
- 6、自定义属性
- Livy:基于Apache Spark的REST服务
- qt中qlineedit和qtextedit右键菜单翻译成中文
- string?变量进行强解包发生崩溃的解决办法