建站公司不给源码,一套完整的vi设计手册,网站怎么做百度认证吗,盐城做网站需要多少钱前言
选修的是蔡mj老师的计算机视觉#xff0c;上课还是不错的#xff0c;但是OpenCV可能需要自己学才能完整把作业写出来。由于没有认真学#xff0c;这门课最后混了80多分#xff0c;所以下面作业解题过程均为自己写的#xff0c;并不是标准答案#xff0c;仅供参考
…前言
选修的是蔡mj老师的计算机视觉上课还是不错的但是OpenCV可能需要自己学才能完整把作业写出来。由于没有认真学这门课最后混了80多分所以下面作业解题过程均为自己写的并不是标准答案仅供参考
任务1
修改test-3.py的task_one()函数基于pedestrian.avi进行稀疏光流估计对行人轨迹进行跟踪。具体输出要求如下
1对视频中跟踪的轨迹进行可视化将所有的轨迹重叠显示在视频的最后一张图像上可视化结果保存为trajectory.png。 def task_one():sparse optical flow and trajectory trackingcap cv2.VideoCapture(pedestrian.avi)# --------Your code--------# cap cv2.VideoCapture(images/kk 2022-01-23 18-21-21.mp4)#cap cv2.VideoCapture(0)# 定义角点检测的参数feature_params dict(maxCorners100, # 最多多少个角点qualityLevel0.3, # 品质因子在角点检测中会使用到品质因子越大角点质量越高那么过滤得到的角点就越少minDistance7 # 用于NMS将最有可能的角点周围某个范围内的角点全部抑制)# 定义 lucas kande算法的参数lk_params dict(winSize(10, 10), # 这个就是周围点临近点区域的范围maxLevel2 # 最大的金字塔层数)# 拿到第一帧的图像ret, prev_img cap.read()prev_img_gray cv2.cvtColor(prev_img, cv2.COLOR_BGR2GRAY)# 先进行角点检测得到关键点prev_points cv2.goodFeaturesToTrack(prev_img_gray, maskNone, **feature_params)# 制作一个临时的画布到时候可以将新的一些画的先再mask上画出来再追加到原始图像上mask_img np.zeros_like(prev_img)while True:ret, curr_img cap.read()if curr_img is None:print(video is over...)breakcurr_img_gray cv2.cvtColor(curr_img, cv2.COLOR_BGR2GRAY)# 光流追踪下curr_points, status, err cv2.calcOpticalFlowPyrLK(prev_img_gray,curr_img_gray,prev_points,None,**lk_params)# print(status.shape) # 取值都是1/0, 1表示是可以追踪到的0表示失去了追踪的。good_new curr_points[status 1]good_old prev_points[status 1]# 绘制图像for i, (new, old) in enumerate(zip(good_new, good_old)):a, b new.ravel()c, d old.ravel()mask_img cv2.line(mask_img, pt1(int(a), int(b)), pt2(int(c), int(d)), color(0, 0, 255), thickness1)mask_img cv2.circle(mask_img, center(int(a), int(b)), radius2, color(255, 0, 0), thickness2)# 将画布上的图像和原始图像叠加并且展示img cv2.add(curr_img, mask_img)#cv2.imshow(desct, img)if cv2.waitKey(60) 0xFF ord(q):print(Bye...)break# 更新下原始图像以及重新得到新的点prev_img_gray curr_img_gray.copy()prev_points good_new.reshape(-1, 1, 2)if len(prev_points) 5:# 当匹配的太少了就重新获得当前图像的角点prev_points cv2.goodFeaturesToTrack(curr_img_gray, maskNone, **feature_params)mask_img np.zeros_like(prev_img) # 重新换个画布cv2.imwrite(trajectory.png, img)任务2
修改test-3.py的task_two()函数基于frame01.png和frame02.png进行稠密光流估计并基于光流估计对图像中的行人进行图像分割。具体输出要求如下
1将稠密光流估计的结果进行可视化可视化结果保存为frame01_flow.png
2对行人分割结果进行可视化得到一个彩色掩码图每个行人的分割区域用单一的颜色表示例如redgreenblue可视化结果保存为frame01_person.png 第二题的第一问的可视化我不清楚题目要问的是什么意思所以跑出了两种结果。
第一种结果是背景人物分割移动的人物会被标记为白色背景会被标记为黑色的 第二种就是frame02图片原照片
def task_two():dense optical flow and pedestrian segmentationimg1 cv2.imread(frame01.png)img2 cv2.imread(frame02.png)# --------Your code--------#cap cv.VideoCapture(cv.samples.findFile(vtest.avi))fgbg cv2.createBackgroundSubtractorMOG2()frame1 img1prvs cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)hsv np.zeros_like(frame1)hsv[..., 1] 255frame2 img2fgmask fgbg.apply(frame2)next cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)flow cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)mag, ang cv2.cartToPolar(flow[..., 0], flow[..., 1])hsv[..., 0] ang * 180 / np.pi / 2hsv[..., 2] cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)bgr cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)#cv2.imshow(frame2, bgr)cv2.imwrite(frame01_flow.png, fgmask)cv2.imwrite(frame01_person.png, bgr)# cv2.imwrite(frame01_flow.png, img_flow)# cv2.imwrite(frame01_person.png, img_mask)源代码
# -*- coding: utf-8 -*-Created on Mon May 29 15:30:41 2023author: cai-mj
import numpy as np
import cv2
from matplotlib import pyplot as plt
import argparsedef task_one():sparse optical flow and trajectory trackingcap cv2.VideoCapture(pedestrian.avi)# --------Your code--------# cap cv2.VideoCapture(images/kk 2022-01-23 18-21-21.mp4)#cap cv2.VideoCapture(0)# 定义角点检测的参数feature_params dict(maxCorners100, # 最多多少个角点qualityLevel0.3, # 品质因子在角点检测中会使用到品质因子越大角点质量越高那么过滤得到的角点就越少minDistance7 # 用于NMS将最有可能的角点周围某个范围内的角点全部抑制)# 定义 lucas kande算法的参数lk_params dict(winSize(10, 10), # 这个就是周围点临近点区域的范围maxLevel2 # 最大的金字塔层数)# 拿到第一帧的图像ret, prev_img cap.read()prev_img_gray cv2.cvtColor(prev_img, cv2.COLOR_BGR2GRAY)# 先进行角点检测得到关键点prev_points cv2.goodFeaturesToTrack(prev_img_gray, maskNone, **feature_params)# 制作一个临时的画布到时候可以将新的一些画的先再mask上画出来再追加到原始图像上mask_img np.zeros_like(prev_img)while True:ret, curr_img cap.read()if curr_img is None:print(video is over...)breakcurr_img_gray cv2.cvtColor(curr_img, cv2.COLOR_BGR2GRAY)# 光流追踪下curr_points, status, err cv2.calcOpticalFlowPyrLK(prev_img_gray,curr_img_gray,prev_points,None,**lk_params)# print(status.shape) # 取值都是1/0, 1表示是可以追踪到的0表示失去了追踪的。good_new curr_points[status 1]good_old prev_points[status 1]# 绘制图像for i, (new, old) in enumerate(zip(good_new, good_old)):a, b new.ravel()c, d old.ravel()mask_img cv2.line(mask_img, pt1(int(a), int(b)), pt2(int(c), int(d)), color(0, 0, 255), thickness1)mask_img cv2.circle(mask_img, center(int(a), int(b)), radius2, color(255, 0, 0), thickness2)# 将画布上的图像和原始图像叠加并且展示img cv2.add(curr_img, mask_img)#cv2.imshow(desct, img)if cv2.waitKey(60) 0xFF ord(q):print(Bye...)break# 更新下原始图像以及重新得到新的点prev_img_gray curr_img_gray.copy()prev_points good_new.reshape(-1, 1, 2)if len(prev_points) 5:# 当匹配的太少了就重新获得当前图像的角点prev_points cv2.goodFeaturesToTrack(curr_img_gray, maskNone, **feature_params)mask_img np.zeros_like(prev_img) # 重新换个画布cv2.imwrite(trajectory.png, img)def task_two():dense optical flow and pedestrian segmentationimg1 cv2.imread(frame01.png)img2 cv2.imread(frame02.png)# --------Your code--------#cap cv.VideoCapture(cv.samples.findFile(vtest.avi))fgbg cv2.createBackgroundSubtractorMOG2()frame1 img1prvs cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)hsv np.zeros_like(frame1)hsv[..., 1] 255frame2 img2fgmask fgbg.apply(frame2)next cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)flow cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)mag, ang cv2.cartToPolar(flow[..., 0], flow[..., 1])hsv[..., 0] ang * 180 / np.pi / 2hsv[..., 2] cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)bgr cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)#cv2.imshow(frame2, bgr)cv2.imwrite(frame01_flow.png, fgmask)cv2.imwrite(frame01_person.png, bgr)# cv2.imwrite(frame01_flow.png, img_flow)# cv2.imwrite(frame01_person.png, img_mask)if __name__ __main__:task_one()task_two()