时间为友,记录点滴。
既然是C++和python双语教程,怎么不提到python在OpenCV中最基本的东西?我们也写过两个例子,什么是最基本的?
跟C++一样,当然是imread的返回值的类型啦!关于numpy的基础知识,不在本专栏里面讨论,因为网上的干货确实一搜一大把。比如我看到介绍最全的下面这个网站:
https://blog.csdn.net/a373595475/article/details/79580734blog.csdn.net我们这里介绍一个跟图像相关的参数,他们会在以后的编程中频繁用到,并且对于图像来说有实际的物理含义。
基本属性:
下面的参数都以一张50x50尺寸的位深为8的单通道灰阶图片为例,说一下每个属性在图像(而不对应到数组中)领域的含义(其中最重要的两个特性是shape和dtype,大多数的问题都出在这两个性质上)。
size:这个图像数据的总大小。(50x50x1, 行x列x一个像素的大小) ndim:维度,这个维度跟mat中的dim属性不一样,它是指数组的长度。对于一张图片来说,ndim只能是2或者3,单通道的是2维数组。 dtype:元素类型(dtype的类型有好多中,就想着跟C/C++的类型保持一致就可以) itemsize:一个像素的大小,单位为bytes(sizeof(dtype) * depth) shape:它包含三个元素(rows, cols, depth, 即行、列、一个像素由几个通道组成)
如果初次在图像领域接触numpy,可能会对ndim和shap中的depth有困扰,其实,解释得越多越糊涂,看代码说话:
def numpyTest():
print("n*****************numpyTest*****************")
data1 = [1, 2, 3]
data2 = [[1, 2, 3], [4, 5, 6]]
data3 = [[[1, 2, 3], [4, 5, 6]],
[[7, 8 ,9], [10, 11, 12]]]
arr1 = np.array(data1)
arr2 = np.array(data2)
arr3 = np.array(data3)
print(arr1.ndim, arr2.ndim, arr3.ndim)
print(arr1.shape, arr2.shape, arr3.shape)
e1 = arr2[[0, 1], [1, 2]]
e2 = arr3[np.array([[0, 0], [1, 1