今天发现了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 风格顺序对数组进行重塑。
二维矩阵转换:文章来源:https://www.toymoban.com/news/detail-685257.html
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列,行数需要计算
三维矩阵转换:文章来源地址https://www.toymoban.com/news/detail-685257.html
#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的小矩阵
到了这里,关于深度学习(十)--- cv2.pointPolygonTest() 判断一点是否在指定区域内的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!