cv2 行从水平变为垂直
cv2 line change from horizontal to vertical
我想弄清楚如何将某些代码中在 cv2 中绘制的线从水平更改为垂直。结果是水平的:
cv2.line(frame, (0, H // 2), (W, H // 2), (0, 255, 255), 2)
如何改为竖屏?
我理解该行以参数 (0, H // 2)
开始并以 (W, H // 2)
结束,但令我困惑的是如何将它从水平坐标定义更改为垂直坐标定义。对此的一些实验没有成功,非常感谢提示。
H
& W
定义为最大 500 像素,此处定义:
# loop over frames from the video stream
while True:
# grab the next frame and handle if we are reading from either
# VideoCapture or VideoStream
frame = vs.read()
frame = frame[1] if args.get("input", False) else frame
# if we are viewing a video and we did not grab a frame then we
# have reached the end of the video
if args["input"] is not None and frame is None:
break
# resize the frame to have a maximum width of 500 pixels (the
# less data we have, the faster we can process it), then convert
# the frame from BGR to RGB for dlib
frame = imutils.resize(frame, width=500)
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# if the frame dimensions are empty, set them
if W is None or H is None:
(H, W) = frame.shape[:2]
在您的特定情况下,答案将是:
cv2.line(frame, (W//2,0), (W//2, H) , (0,255,255), 2)
一般性讨论:
如果您在 python 中使用 OpenCV,则必须提供一些东西。当您创建任何类型的数组时,其维度为 NxM
N 将是行数,M 是列数。如果您将其作为图像,N 将是高度,M 将是宽度。
通常您将访问 i-th 行和 j-th 列作为 :
import numpy as np
import cv2
a = np.random.randint(255,size=(500,300),dtype=np.uint8)
i=20
j=30
#access to ith jth
print( a[i,j] )
OpenCV 函数通常首先将列作为坐标,然后是行。
所以如果你想使用同一个点访问并创建一条长度为 50 的水平线。你可以调用
line_length = 50
a = cv2.line(a,(j,i),(j+line_length,i),(0,0,0),2)
然后显示出来
cv2.line
至少需要 4 个参数,但您可以输入其他参数:
- img:工作图像
- p0: 图像中直线的起点 (coord_x,coord_y)
- p1: 图像中线的终点 (coord_x,coord_y)
- 颜色:作为强度(通常为 0-255)的元组 (B,G,R)
第一个可选的是线宽。
你可以查看文档:
https://docs.opencv.org/4.x/d6/d6e/group__imgproc__draw.html#ga7078a9fae8c7e7d13d24dac2520ae4a2
我想弄清楚如何将某些代码中在 cv2 中绘制的线从水平更改为垂直。结果是水平的:
cv2.line(frame, (0, H // 2), (W, H // 2), (0, 255, 255), 2)
如何改为竖屏?
我理解该行以参数 (0, H // 2)
开始并以 (W, H // 2)
结束,但令我困惑的是如何将它从水平坐标定义更改为垂直坐标定义。对此的一些实验没有成功,非常感谢提示。
H
& W
定义为最大 500 像素,此处定义:
# loop over frames from the video stream
while True:
# grab the next frame and handle if we are reading from either
# VideoCapture or VideoStream
frame = vs.read()
frame = frame[1] if args.get("input", False) else frame
# if we are viewing a video and we did not grab a frame then we
# have reached the end of the video
if args["input"] is not None and frame is None:
break
# resize the frame to have a maximum width of 500 pixels (the
# less data we have, the faster we can process it), then convert
# the frame from BGR to RGB for dlib
frame = imutils.resize(frame, width=500)
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# if the frame dimensions are empty, set them
if W is None or H is None:
(H, W) = frame.shape[:2]
在您的特定情况下,答案将是:
cv2.line(frame, (W//2,0), (W//2, H) , (0,255,255), 2)
一般性讨论:
如果您在 python 中使用 OpenCV,则必须提供一些东西。当您创建任何类型的数组时,其维度为 NxM
N 将是行数,M 是列数。如果您将其作为图像,N 将是高度,M 将是宽度。
通常您将访问 i-th 行和 j-th 列作为 :
import numpy as np
import cv2
a = np.random.randint(255,size=(500,300),dtype=np.uint8)
i=20
j=30
#access to ith jth
print( a[i,j] )
OpenCV 函数通常首先将列作为坐标,然后是行。
所以如果你想使用同一个点访问并创建一条长度为 50 的水平线。你可以调用
line_length = 50
a = cv2.line(a,(j,i),(j+line_length,i),(0,0,0),2)
然后显示出来
cv2.line
至少需要 4 个参数,但您可以输入其他参数:
- img:工作图像
- p0: 图像中直线的起点 (coord_x,coord_y)
- p1: 图像中线的终点 (coord_x,coord_y)
- 颜色:作为强度(通常为 0-255)的元组 (B,G,R)
第一个可选的是线宽。
你可以查看文档:
https://docs.opencv.org/4.x/d6/d6e/group__imgproc__draw.html#ga7078a9fae8c7e7d13d24dac2520ae4a2