cv2.line的例子
时间: 2023-07-31 08:05:32 浏览: 47
以下是使用cv2.line函数在图片上画直线的例子:
```python
import cv2
import numpy as np
# 创建一张黑色的图片
img = np.zeros((512, 512, 3), np.uint8)
# 在图片上画一条红色的直线,起点坐标为(0,0),终点坐标为(511,511),线条宽度为5
img = cv2.line(img, (0, 0), (511, 511), (0, 0, 255), 5)
# 显示图片
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们使用numpy库创建了一张大小为512x512的黑色图片。然后,我们使用cv2.line函数在图片上画了一条起点坐标为(0,0),终点坐标为(511,511),线条宽度为5的红色直线。最后,我们使用cv2.imshow函数展示了这张图片。
相关问题
cv2.line函数
您可以使用OpenCV库中的cv2.line函数在两张图像上绘制线。下面是一个示例代码:
```python
import cv2
import numpy as np
# 读取两张图像
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')
# 创建一个新的图像,将两张图像连接在一起
combined_image = np.hstack((image1, image2))
# 在combined_image上绘制线
start_point = (100, 100) # 线的起点坐标
end_point = (400, 400) # 线的终点坐标
color = (0, 255, 0) # 线的颜色 (BGR格式)
thickness = 2 # 线的粗细
cv2.line(combined_image, start_point, end_point, color, thickness)
# 显示绘制了线的图像
cv2.imshow('Combined Image with Line', combined_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们首先使用cv2.imread函数读取了两张图像(image1.jpg和image2.jpg)。然后,我们使用np.hstack函数将这两张图像连接在一起,创建了一个新的图像combined_image。接下来,我们使用cv2.line函数在combined_image上绘制了一条线,起点为(100, 100),终点为(400, 400),颜色为绿色,粗细为2。最后,我们使用cv2.imshow显示了绘制了线的图像。您可以根据需要修改起点、终点、颜色和粗细来绘制您想要的线条。
cv2.calcOpticalFlowPyrLK例子
下面是一个使用 cv2.calcOpticalFlowPyrLK 函数实现光流追踪的例子:
``` python
import cv2
import numpy as np
# 读取两幅图像
frame1 = cv2.imread('frame1.jpg')
frame2 = cv2.imread('frame2.jpg')
# 定义特征点的位置
feature_params = dict(maxCorners=100, qualityLevel=0.3, minDistance=7, blockSize=7)
prev_pts = cv2.goodFeaturesToTrack(cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY), mask=None, **feature_params)
# 定义光流追踪参数
lk_params = dict(winSize=(15, 15), maxLevel=2, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
# 计算光流
next_pts, status, error = cv2.calcOpticalFlowPyrLK(cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY), cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY), prev_pts, None, **lk_params)
# 选取跟踪成功的特征点
good_new = next_pts[status == 1]
good_old = prev_pts[status == 1]
# 绘制光流轨迹
for i, (new, old) in enumerate(zip(good_new, good_old)):
a, b = new.ravel()
c, d = old.ravel()
frame2 = cv2.circle(frame2, (a, b), 5, (0, 0, 255), -1)
frame2 = cv2.line(frame2, (a, b), (c, d), (0, 255, 0), 2)
# 显示结果
cv2.imshow("frame2", frame2)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个例子中,我们先读取了两幅图像 frame1 和 frame2,并使用 cv2.goodFeaturesToTrack 函数计算了在第一幅图像中的特征点 prev_pts。然后,我们定义了光流追踪的参数 lk_params,包括窗口大小、金字塔层数和迭代停止条件等。接着,我们调用 cv2.calcOpticalFlowPyrLK 函数计算了在第二幅图像中对应的特征点 next_pts,以及每个特征点的跟踪状态和误差估计。最后,我们选取跟踪成功的特征点 good_new 和 good_old,绘制它们的轨迹,最终显示结果。
阅读全文