图像识别(四)光点的运动轨迹

遇到一个坑,plot动画update init返回值需要逗号,不然报错
代码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

path = r'./t3.mp4'
cap = cv2.VideoCapture(path)

def get_threshold(image):
	_,image = cv2.threshold(image,220,255,cv2.THRESH_BINARY)
	return image

def show_image(image,num=0):
	name = 'num is '+str(num)
	#h,w = image.shape
	# h,w = int(h*0.5),int(w*0.5)
	cv2.namedWindow(name,0)
	#cv2.resizeWindow(name,w,h)
	cv2.imshow(name,image)
	cv2.waitKey(1000)
	cv2.destroyAllWindows()

def get_box(image):
	image_map = np.zeros(image.shape)
	_,contours,h = cv2.findContours(image,0,1)
	for contour in contours:
		eps = 1e-3 * cv2.arcLength(contour,True)
		#拟合多边形
		approx = cv2.approxPolyDP(contour,eps,True)
		#提取矩形
		rect = cv2.minAreaRect(approx)
		#提取矩形坐标
		box = cv2.boxPoints(rect)
		box = np.int0(box)
		center_x = (box[0][0]+box[2][0])/2
		center_y = (box[0][1]+box[2][1])/2
	return center_x,center_y

x_list = []
y_list = []
xdata = []
ydata = []

#配置画布尺寸
fig = plt.figure()
ax = plt.axes(xlim=(0,2000),ylim=(0,1000))

scatters = plt.scatter(xdata, ydata, marker = 'o', color = 'green',s=120)
def init():
	return scatters,

def update(frame):
	print(frame)
	xdata.append(frame[0])
	ydata.append(frame[1])
	#scatters.set_data(xdata,ydata)
	scatters = plt.scatter(xdata, ydata, marker = 'o', color = 'green',s=10)
	return scatters,

def get_data_list(x_list,y_list):
	num = len(x_list)
	data_list = []
	for i in range(num):
		data_list.append([x_list[i],y_list[i]])
	return data_list

try:
	while (cap.isOpened()):
		ret,frame = cap.read()
		image = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
		image = get_threshold(image)
		center_x,center_y = get_box(image)
		x_list.append(center_x)
		y_list.append(center_y)
		
		#show_image(image)
except Exception as e:
	print(e)
finally:
	#data_list = np.stack([x_list,y_list],axis=1)
	data_list = get_data_list(x_list,y_list)
	ani = FuncAnimation(
			fig = fig,
			func = update,
			frames = data_list,
			interval=10,
			init_func=init,
			blit = True
			)
	ani.save('points.gif',writer = 'imagemagick')
	plt.show()

效果图如下:
在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32是一款广泛应用于嵌入式系统开发的微控制器,它可以通过各种外设模块来实现对舵机的控制。舵机是一种能够转动特定角度的电动装置,通常用于机器人控制、遥控模型等领域。 要在STM32上实现舵机光点运动轨迹控制,我们首先需要连接舵机到STM32的GPIO口上,并选用适当的驱动模式。然后我们可以使用PWM(脉冲宽度调制)信号来控制舵机的转动角度。 为了实现运动轨迹控制,我们可以在程序中定义一组规定的坐标点,并通过计算相邻坐标点之间的差值来控制舵机的转动角度。假设我们需要舵机光点从起点移动到终点,我们可以先计算出x轴和y轴方向上的角度差值,然后分别发送PWM信号给舵机,使之先在x轴上转到目标点,然后在y轴上转到目标点。 在代码中,我们可以利用定时器来产生PWM信号,通过改变占空比来控制舵机的转动角度。可以根据具体的舵机型号和规格进行调试和参数设置,以保证转动角度的准确性和精度。 总结起来,使用STM32实现舵机光点运动轨迹控制需要连接舵机到GPIO口,并使用PWM信号来控制舵机的转动角度。通过定义一组规定的坐标点和计算角度差值,我们可以控制舵机按照指定的轨迹移动。同时,通过定时器生成PWM信号,我们可以精确地控制舵机的转动角度,实现精准的运动轨迹控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值