深度学习(十)--- cv2.pointPolygonTest() 判断一点是否在指定区域内

今天发现了opencv一个好用的函数 cv2.pointPolygonTest() ,它可以判断一个点是否在指定区域内。

1. cv2.pointPolygonTest() 函数解析
dist = cv2.pointPolygonTest(contour,point,Boolean)

contour: 多边形轮廓
point: 坐标点
Boolean:True或False ,True,返回距离值,内部为正,外部为负
dist: 图像里的点和轮廓之间的最短距离,轮廓外为负,轮廓内为正,轮廓上为0
2 . 代码示例
#设置多边形形状
pts = np.array([[759,281],[894,300],[854,395],[692,350]],np.int32)
# print(pts)
#坐标点
point =(814,339)
flag = cv2.pointPolygonTest(pts, point, True) ##判断一个点是否在多边形内部,pts:多边形的轮廓,(x,y)坐标点,True:表示返回点到多边形边界的距离
if flag >= 0:
    cv2.putText(image,"Within the boundary", (x,y),cv2.FONT_HERSHEY_COMPLEX,1,(255,0,255),3)  #在多边形内
else:
    cv2.putText(image,"Out of bounds", (x,y),cv2.FONT_HERSHEY_COMPLEX,1,(255,0,255),3) #不在多边形内
    
print(flag) # 输出距离值
3.reshape()

reshape() 是一个在 numpy 库中常用的函数,用于改变数组的形状.

numpy.reshape(array, newshape, order='C')

array:需要被改变形状的数组。
newshape:新的形状,可以是整数元组或整数列表。
order:可选参数,默认为 'C',表示按行的 C 风格顺序对数组进行重塑。

二维矩阵转换:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])  #2行3列
new_arr = np.reshape(arr, (3, 2))   #转换为3行2列
print(new_arr)  --->array([[1, 2],[3, 4],[5, 6]])

reshape(m,-1) #改成m行,列数需要计算
reshape(-1,m) #改成m列,行数需要计算

三维矩阵转换:

#3行4列的矩阵
z = np.array([[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12]])
          
转换为3维矩阵:
z.reshape(-1,2,3)的结果:
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]
结果大小: (2, 2, 3)

reshape(-1,m,n)#改成三维矩阵,不知道几个小矩阵,改成m*n的小矩阵
reshape(-1,2,2,3)#改成四维矩阵,不知道几个小矩阵,改成2个,2*3的小矩阵

你可能感兴趣的:(opencv,opencv,python)