NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

本文主要介绍的是C++版本的,地址:https://github.com/dpilger26/NumCpp

这就是C++版本的NumPy,名为NumCpp,是一位叫David Pilger的程序员开发的。从此用#include也能导入头文件,就像Python程序员用import一样容易。
二者除了语法上的差异,调用函数的名称也几乎一致。就算有什么不懂,你也可以去David的说明文档页查找具体用法。
以最基础的数组定义和初始化为例,NumCpp可以直接定义数组、改变数组形状、转换变量类型、生成对角矩阵等等。
从上图可以看出,NumPy和NumCpp调用的函数名称几乎完全一致,除了在定义数据类型上有一些差别。需要注意的是NumpCpp中的创建一个数组调用的是NdArray,而Python上用的是array。
如果需要更详细的了解两种工具包的差异。可以去下面的命名空间、数据结构索引中查看。
命名空间列表按照功能分类,命名空间成员则按照名称排序。数据结构也与之类似。
附上python实例:
安装NumPy
python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose
可能需要更新pip提示,直接upgrade就行了。
测试代码
>>> from numpy import *
>>> eye(4)
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
安装Opencv
python -m pip install opencv-python
如果中断可以尝试用梯子或者多试几次!
测试代码:
# -*- coding: utf-8 -*
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
panel = np.zeros([100, 700], np.uint8)
cv2.namedWindow('panel')
def nothing(x):
pass
cv2.createTrackbar('L – h', 'panel', 0, 179, nothing)
cv2.createTrackbar('U – h', 'panel', 179, 179, nothing)
cv2.createTrackbar('L – s', 'panel', 0, 255, nothing)
cv2.createTrackbar('U – s', 'panel', 255, 255, nothing)
cv2.createTrackbar('L – v', 'panel', 0, 255, nothing)
cv2.createTrackbar('U – v', 'panel', 255, 255, nothing)
cv2.createTrackbar('S ROWS', 'panel', 0, 480, nothing)
cv2.createTrackbar('E ROWS', 'panel', 480, 480, nothing)
cv2.createTrackbar('S COL', 'panel', 0, 640, nothing)
cv2.createTrackbar('E COL', 'panel', 640, 640, nothing)
while True:
#_, frame = cap.read()
#if not frame:
# print 'frame is empty'
# break
s_r = cv2.getTrackbarPos('S ROWS', 'panel')
e_r = cv2.getTrackbarPos('E ROWS', 'panel')
s_c = cv2.getTrackbarPos('S COL', 'panel')
e_c = cv2.getTrackbarPos('E COL', 'panel')
#roi = frame[s_r: e_r, s_c: e_c]
roi = cv2.imread('D:\\test.jpg')
hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
l_h = cv2.getTrackbarPos('L – h', 'panel')
u_h = cv2.getTrackbarPos('U – h', 'panel')
l_s = cv2.getTrackbarPos('L – s', 'panel')
u_s = cv2.getTrackbarPos('U – s', 'panel')
l_v = cv2.getTrackbarPos('L – v', 'panel')
u_v = cv2.getTrackbarPos('U – v', 'panel')
lower_green = np.array([l_h, l_s, l_v])
upper_green = np.array([u_h, u_s, u_v])
mask = cv2.inRange(hsv, lower_green, upper_green)
mask_inv = cv2.bitwise_not(mask)
bg = cv2.bitwise_and(roi, roi, mask=mask)
fg = cv2.bitwise_and(roi, roi, mask=mask_inv)
cv2.imshow('bg', bg)
cv2.imshow('fg', fg)
cv2.imshow('panel', panel)
k = cv2.waitKey(30) & 0xFF
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
本文链接:https://www.it72.com/12648.htm