2020-10-01

本文介绍在国产深度操作系统上编译安装OpenCV及Python版本的步骤,并提供利用手机摄像头作为输入源的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:编辑中


前言

以前学习东西总是保存到本地,时间久了就遗忘了,重置电脑后也就丢失了,所以现在把已经踩过的一些坑分享给大家,共同进步。现在刚接触视觉跟踪,先跑个例程熟悉熟悉。


一、硬件平台

1. 操作系统

以前经常用ubuntu,后来经朋友推荐用国产linux 深度(deepin)操作系统,其界面美观,运行流畅,还有常用的一些软件。这是官网:
https://www.deepin.org/zh/

2. 下载opencv 4.2 ,opencv_contrib 4.2

这里提供一个下载技巧,先找到源码github地址,如果不是科学上网,非常慢,所以用国内的码云做跳板,具体方法如下:
首先创建一个码云账号,然后导入代码仓库,输入github地址,最后下载,速度飞快
在这里插入图片描述
在这里插入图片描述
这是我导入的,最好自己导入,熟悉一下
opencv
opencv_contrib

二、编译

1.解压

将两个压缩包 opencv 解压到某一个路径内 ,opencv_contrib解压到 opencv/目录下,如图
在这里插入图片描述
在opencv下新建一个build文件下,进入,然后在里面打开控制台
在这里插入图片描述
代码如下:

cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \  -D WITH_TBB=ON \ -D WITH_V4L=ON \ -D WITH_QT=ON \ -D WITH_OPENGL=ON \ -D OPENCV_EXTRA_MODULES_PATH=/home/tanglei/Downloads/opencv/opencv_contrib/modules\ -D BUILD_EXAMPLES=ON \ -D OPENCV_GENERATE_PKGCONFIG=YES ..

/home/tanglei/Downloads/opencv/opencv_contrib/modules这个是 opencv_contrib/modules的路径
结果如下:
在这里插入图片描述
14为编译线程数量,根据自己电脑CPU性能选择合适的线程数量,不死机就行。

make -j14

安装成功
在这里插入图片描述

2.安装python版本的opencv

代码如下(示例):

安装pip3

#清华源安装pip3
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualen
##更新(可选 )
pip3 install --upgrade pip

安装opencv-pythonopencv-python和 opencv-contrib-python

Pip3 install opencv-python -i http://mirrors.aliyun.com/pypi/simple/   --trusted-host mirrors.aliyun.com
Pip3 install opencv-contrib-python -i http://mirrors.aliyun.com/pypi/simple/   --trusted-host mirrors.aliyun.com

参考文献
Pip使用国内源安装opencv

最后执行 python语句

import cv2

不报错就表示安装成功
从这里获取python opencv kcf代码
python调用opencv库中的KCF等跟踪算法
如果自己电脑有摄像头,改摄像头序号就行,如果没有,那么可以用手机的摄像头,具体方法如下
下载以下 安卓软件
IP摄像头

打开,界面如下

设置一下账号和密码都为admin,然后开启就可以了
下一步:手机插上电脑USB,手机上 设置USB网络共享。或者用电脑连接手机WIFI
然后在浏览器输入 手机上显示的ip地址和端口,在浏览器上就可以看见手机的摄像头数据了

#python测试代码如下
import numpy as np
import cv2
#这个改为自己手机APP显示的ip
video = 'http://admin:admin@192.168.43.1:8081/'
cap = cv2.VideoCapture(video)
print(1)
while(True):
    ret, frame = cap.read()
    print('OK')
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
        cap.release()
        cv2.destroyAllWindows()

如果电脑没有摄像头,那么就把上面网站给的 opencv kcf代码 改成下面这样
在这里插入图片描述
最后run code就可以了


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
<think>好的,我现在需要解决用户的问题,就是把Excel表格中的日期时间列拆分成日期和时间两列。用户给的例子是“2020-10-01 01:00:00”拆成日期“2020-10-01”和时间“1”。首先,我得想清楚怎么用Python来实现这个需求。 首先,用户提到的是“云量.xlsx”这个文件,我需要用pandas来处理Excel文件。所以第一步应该是用pandas的read_excel函数读取这个文件。然后,处理日期时间列。假设日期列的列名是“日期”,我需要确认这一点,但用户没有给出具体的列名,可能需要假设或者提醒用户确认。不过这里用户可能已经明确列名是“日期”。 接下来,拆分日期和时间。日期部分可以直接提取日期,而时间部分用户只需要小时部分,并且是整数形式,比如“01:00:00”变成1。所以需要将日期时间字符串转换为datetime类型,然后提取date()作为日期列,再提取hour作为时间列。 步骤大概是这样的: 1. 导入pandas库。 2. 读取Excel文件。 3. 将日期列转换为datetime类型,可能需要用pd.to_datetime。 4. 创建新列“日期”为datetime对象的日期部分。 5. 创建新列“时间”为datetime对象的小时部分。 6. 保存修改后的DataFrame回Excel文件。 需要注意的问题可能有:日期列的原始格式是否正确,是否需要处理其他格式问题,比如不同的日期时间格式。不过用户给的例子是标准的“YYYY-MM-DD HH:mm:ss”,所以用pandas转换应该没问题。 另外,保存时是否需要覆盖原文件还是另存为新文件。用户可能希望覆盖或者新增列在原文件中,但通常处理数据时最好保存为新文件,比如“云量_处理后.xlsx”,避免原始数据丢失。不过用户没有说明,可能需要询问,但根据问题描述,可能直接保存处理后的数据到原文件或者新文件。代码示例里可以保存到新文件,避免覆盖。 可能的代码结构: import pandas as pd df = pd.read_excel('云量.xlsx') df['日期'] = pd.to_datetime(df['日期']) df['日期_新'] = df['日期'].dt.date df['时间'] = df['日期'].dt.hour 或者直接修改原日期列,覆盖成日期部分,但用户可能希望保留原日期时间列?根据例子,用户拆分后日期列的内容变成日期部分,所以可能需要将原列拆分,覆盖原日期列,并新增时间列。或者原列保持不变,新增两列。但用户描述是“新增一列时间列”,日期列的内容变成日期部分。所以需要将原日期列替换为日期部分,并新增时间列。 所以代码应该是: df['日期'] = pd.to_datetime(df['日期']) df['时间'] = df['日期'].dt.hour df['日期'] = df['日期'].dt.date 然后保存: df.to_excel('云量_处理后.xlsx', index=False) 这样处理的话,原日期列会被修改为日期部分,新增时间列。不过用户可能需要保留原日期时间列,但根据问题描述,用户可能希望拆分后日期列显示日期,时间列显示小时,所以原列被替换。 另外,dt.date返回的是date对象,保存到Excel可能会变成日期格式,而用户可能想要字符串形式。例如,用户例子中的日期是“2020-10-01”字符串,而不是日期类型。所以可能需要转换为字符串。比如: df['日期'] = df['日期'].dt.strftime('%Y-%m-%d') 这样确保日期列是字符串格式,显示正确。同样,时间列是整数,不需要转换,因为dt.hour返回的是整数。 所以修正后的步骤: 读取数据后,将日期列转为datetime,然后新建日期列使用strftime,时间列用dt.hour。 完整的代码可能如下: import pandas as pd df = pd.read_excel('云量.xlsx') # 将日期列转换为datetime类型 df['日期'] = pd.to_datetime(df['日期']) # 拆分日期和时间 df['时间'] = df['日期'].dt.hour df['日期'] = df['日期'].dt.strftime('%Y-%m-%d') # 保存到新文件 df.to_excel('云量_处理后的.xlsx', index=False) 这样处理后,日期列会是字符串格式的日期,时间列是整数小时。这样符合用户的需求。比如原列的“2020-10-01 01:00:00”会被拆分成日期“2020-10-01”,时间“1”。 需要确认是否列名正确,假设原日期列的列名是“日期”。如果有其他列名,需要相应调整。但用户的问题中提到的日期列字段,所以假设列名正确。 可能还需要处理数据中的空值或异常格式,但用户的问题中没有提到,所以代码可能不需要处理这些情况。 总结,代码应该使用pandas读取Excel,转换日期列,提取日期和小时,保存结果。</think>以下是实现该需求的Python代码: ```python import pandas as pd # 读取Excel文件 df = pd.read_excel('云量.xlsx') # 将日期列转换为datetime类型 df['日期'] = pd.to_datetime(df['日期']) # 拆分日期和时间 df['时间'] = df['日期'].dt.hour # 提取小时作为整数 df['日期'] = df['日期'].dt.date # 提取日期(自动转为date类型) # 若需要日期保持字符串格式(可选) # df['日期'] = df['日期'].dt.strftime('%Y-%m-%d') # 保存到新Excel文件(避免覆盖原文件) df.to_excel('云量_处理后.xlsx', index=False) ``` ### 代码说明: 1. `pd.read_excel()` 会默认读取第一个工作表,如果你的数据在其他工作表需要指定`sheet_name`参数 2. `dt.date`会提取日期部分(返回`date`对象),在Excel中显示为日期格式 3. `dt.hour`会直接提取小时数作为整数(1点返回`1`,13点返回`13`) 4. 如果要强制日期列存储为字符串格式(而非日期类型),可以使用`dt.strftime('%Y-%m-%d')` ### 效果示例: | 原日期列 | 处理后日期列 | 时间列 | |------------------------|----------------|--------| | 2020-10-01 01:00:00 | 2020-10-01 | 1 | | 2020-10-01 13:30:45 | 2020-10-01 | 13 | ### 注意: - 如果原日期列名称不叫`日期`,请将代码中的`日期`替换为实际列名 - 建议先备份原始文件再操作 - 如果要覆盖原文件,将输出文件名改为`云量.xlsx`即可
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值