1.(h,w)与(x,y)
由于图像在计算机中以矩阵形式存储,而矩阵的索引为(rows,cols),但图像的屏幕坐标系为(x,y)与(h,w)刚好相反,因此一些api的参数和数学原理存在一定的差异性,一不小心就掉坑……
几个参数让人头大的api:
1.img.shape[:2]返回的属性依次为像素矩阵大小,也就是最大的行数(h)和最大的列数(w),一般如下赋值避免混淆h,w = src.shape[:2]
,属于(h,w)型参数。
2.图像插值numpy.resize(),非常坑爹,第二个参数顺序为(w,h),也就是新图像大小为x轴有w个元素,y轴有h个元素,为了符合视觉和习惯认识,对原图进行大小变化应该反转参数顺序,总之,此api是(x,y)型的参数选择。
3.numpy.reshape(),参数顺序为新矩阵的行和列,故为(h,w)型参数。
4.绘图系列函数参数全部是(x,y)型的参数选择。
cv.line(img,(0,0),(300,500),(0,255,0),4,cv.LINE_8,0)
2.Python知识
1.[::-1]
省略起止位置,步进为-1
python中步进为正,从左往右取,步进为负,从右往左取
效果跟reverse()方法类似,实现反转
2.zip方法
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
zip()函数的定义:
从参数中的多个迭代器取元素组合成一个新的迭代器;
返回:
返回一个zip对象,其内部元素为元组;可以转化为列表或元组;
传入参数:
元组、列表、字典等迭代器。
3.numpy.where(condition):输出True的索引
输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。
矩阵操作,索引为第几行第几列,故为(h,w)型,在多模板匹配时要进行反转。
3.最终多模板匹配效果
用黄色矩形选出原图中匹配的模板