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 个参数,但您可以输入其他参数:

  1. img:工作图像
  2. p0: 图像中直线的起点 (coord_x,coord_y)
  3. p1: 图像中线的终点 (coord_x,coord_y)
  4. 颜色:作为强度(通常为 0-255)的元组 (B,G,R)

第一个可选的是线宽。

你可以查看文档:

https://docs.opencv.org/4.x/d6/d6e/group__imgproc__draw.html#ga7078a9fae8c7e7d13d24dac2520ae4a2