cv2.resize
cv2.imread读出来的图片是[H,W,3]
然而cv2.resize的想法有点不一样
cv2.resize(im, (dst_w, dst_h))
意思是括号里面的两个参数制定了目标图像的 宽 和 高
举个栗子,我要把某图的宽度折半,高度不变
im=cv2.imread('a.jpg')
im.shape #[ 400, 600 ,3]
im1=cv2.resize(im,(im.shape[1]//2 , im.shape[0]))
im1.shape #[400, 300, 3]
这个语法有一点反人类
cv2.boxPoints
输入形式是((x_center, y_center),(w,h), theta)
正代表顺时针的角度 负代表逆时针角度
下面只统计 -90~90度的情况 暂不考虑90~180和-180~-90 容易绕晕
当输入theta在0~90度时候和-360~-270
从下面的结果可以看出30度和-330度返回的结果相同
即theta=theta-360
并且返回四个点(8个坐标)分别是
左下角 左上角 右上角 右下角
当输入theta在-90~0度和270~360时候
从下面的结果可以看出-30度和330度返回的结果相同
theta=theta+360
并且返回四个点(8个坐标)分别是
左下角 左上角 右上角 右下角
在上述两种情况下 8个点的返回顺序是一致的
box=cv2.boxPoints( ( (50 ,50) ,(10, 10), 30))
array([[43.169872, 51.830128],
[48.169872, 43.169872],
[56.830128, 48.169872],
[51.830128, 56.830128]], dtype=float32)
#
box=cv2.boxPoints( ( (50 ,50) ,(10, 10), -330))
array([[43.169872, 51.830128],
[48.169872, 43.169872],
[56.830128, 48.169872],
[51.830128, 56.830128]], dtype=float32)
#
cv2.boxPoints( ( (50 ,50) ,(10, 10), -30))
array([[48.169872, 56.830128],
[43.169872, 48.169872],
[51.830128, 43.169872],
[56.830128, 51.830128]], dtype=float32)
#
cv2.boxPoints( ( (50 ,50) ,(10, 10), 330))
array([[48.169872, 56.830128],
[43.169872, 48.169872],
[51.830128, 43.169872],
[56.830128, 51.830128]], dtype=float32)
cv2.minAreaRect
输入的形式([[x1,y1],[x2,y2],[x3,y3],[x4,y4]])
如果用cv2.boxPoints的输出给到cv2.minAreaRect
在boxPoints输入的角度是0-90度时候
最终得到theta与原来并不一样
例如
box=cv2.boxPoints( ( (50 ,50) ,(10, 10), 30))#结果在上面代码块
cv2.minAreaRect(box)
结果是
((50.000003814697266, 50.0), (10.000000953674316, 10.000000953674316), -60.0)
即使我改变四个点的顺序
**左下角 左上角 右上角 右下角** -> **左上角 右上角 右下角 左下角**
cv2.minAreaRect(np.array([box[1],box[2],box[3],box[0]],dtype=np.float32))
结果依然是
((50.000003814697266, 50.0), (10.000000953674316, 10.000000953674316), -60.0)
打乱个点的顺序
**左下角 左上角 右上角 右下角** ->**左下角 右上角 左上角 右下角**
cv2.minAreaRect(np.array([box[0],box[2],box[1],box[3]],dtype=np.float32))
结果还是
((50.000003814697266, 50.0), (10.000000953674316, 10.000000953674316), -60.0)
但是
在boxPoints输入的角度是-90 ~0度时候
最终得到theta与原来一样
box0=cv2.boxPoints( ( (50 ,50) ,(10, 10), -30))
cv2.minAreaRect(box0)
结果
((50.000003814697266, 50.000003814697266),
(10.000000953674316, 10.000000953674316),
-29.999998092651367)
#
box0=cv2.boxPoints( ( (50 ,50) ,(10, 10), -60))
#上述等效于box0=cv2.boxPoints( ( (50 ,50) ,(10, 10), 120))
cv2.minAreaRect(box0)
结果
((50.000003814697266, 50.0), (10.000000953674316, 10.000000953674316), -60.0)
参考这篇文章