opencv&&ffmpeg

2023-10-31

windows运行ffmeg工具

cd到ffmpeg 目录下   
命令
 ffmpeg -i 文件名.mp4 -vn -c copy 1.mp3                                        //抽取音频文件 抽取视频换成   -an
 ffmpeg -ss 0:0:30 -t 0:0:5 -input.mp3 -c copy output.mp3 //从一段mp3 中截取一段(5s)mp3
 ffmpeg.exe -i 1.mp3 -i 1.mp4 -c copy 2.mp4                     //将音频和视频合并     

opencv基本使用&&opencv基本安装

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main(int argc, char* argv[])
{
	Mat image1 = imread("1.png");
	imwrite("5.png",image1);//保存这张图片
	Mat src = imread("2.png");
	Mat image;

	//Rect rect(0, 0, 100, 100);//矩形截取这个图片
	//Mat src = src1(rect);//利用这个矩形来构造mat



	//cvtColor(image, image, COLOR_BGR2GRAY);//灰度图的转换
	//threshold(image, image, 100, 255,THRESH_BINARY);//二进制阈值化

	
	                     //saturate_cast<uchar>(这里可以是函数);//防止值溢出1个字节得函数 如果溢出就被设置为255
	//image.convertTo(image, -1, 2.0, 50);//改变图片得对比度和亮度参数一目标图片 参数2表示图片类型 -1就是当前类型 参数3 4亮度和对比度
	//image.type();//指图像得类型 是灰度图还是grb图像
	//image.create(Size(), image.type());//生成创建空间

	//resize(image, image, Size(300, 300), 0, 0, INTER_NEAREST);//重定义图片得大小 4 5参数表示比例 6表示用什么算法 INTER_LINEAR另一种算法这种算法在处理放大时不会模糊
	//pyrDown(image, image);//高斯金字塔向下采样 图像越来越小就是图像按照比例缩小 缩小一半
	//pyrUp(image, image);//拉普拉斯金字塔向上采集 图像越来越大  美调用一次增大一倍


	//float a = 0.5;
	//resize(src, src, image1.size());//调整resize的大小
	//addWeighted(image1, a, src, 1-a, 80, image);//合并两张图片第2 4为透明度,参数5为帧义(亮度) 6为目标图片


	//rotate(image1, image1, ROTATE_180);//顺时针选择180度
	//flip(image1, image1, 1);//镜像 0表示对x轴镜像1表示对y轴做镜像-1表示x y都做镜像


	//将两张图片并排显示
	Mat img1 = imread("1.png");
	Mat img2 = imread("2.png");
	int height = img1.rows;
	int width1 = img1.cols;
	int width2 = img2.cols;
	// 将高图像等比缩放与低图像高度一致
	if (img1.rows > img2.rows)
	{
		height = img2.rows;
		width1 = img1.cols * ((float)img2.rows / (float)img1.rows);
		resize(img1, img1, Size(width1, height));
	}
	else if (img1.rows < img2.rows)
	{
		width2 = img2.cols * ((float)img1.rows / (float)img2.rows);
		resize(img2, img2, Size(width2, height));
	}
	//创建目标Mat
	Mat des;
	des.create(height, width1 + width2, img1.type());
	Mat r1 = des(Rect(0, 0, width1, height));
	img1.copyTo(r1);
	Mat r2 = des(Rect(width1, 0, width2, height));
	img2.copyTo(r2);//将两张图片并排显示*/












	namedWindow("img");//创建窗口
	imshow("img", des);//窗口显示图片
	waitKey(0);//等待按键刷新显示的图像
	return 0;
}
/*********************************************************************
*  配置opencv
*  下载opencv440
*  在x64下的/c15下的lib目录 opencv_world440d.lib这个文件放到当前目录,(dll动态链接库 链接器写lib)
*  在opencv目录下将include目录拷到当前目录
*  在x64下的/c15下的bin目录拷到当前目录 ( 这里需添加opencv_ffmpeg440.dll openh264-1.6.0-win32msvc.dll<没有可以去下载> opencv_world440.dll )
*  当前项目选择配置包含目录 包含库目录 
*  连接器选择opencv_world440d.lib这个库文件即可

qt配置第三方库
pro文件 添加库,选择lib问添加,更改头文件
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../ku/face-sdk-demo/third_party/libzip/x64/ -lzip
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../ku/face-sdk-demo/third_party/libzip/x64/ -lzipd

INCLUDEPATH += $$PWD/../../ku/face-sdk-demo/third_party/libzip/x64
DEPENDPATH += $$PWD/../../ku/face-sdk-demo/third_party/libzip/x64

***********************************************************************/

//视频播放

int main(int argc, char* argv[])
{
    #include<videoio.hpp>
	VideoCapture video;//打开摄像头或播放视频得类
	//bool open(int index api 这里是一个宏);//打开摄像头 视频流文件//同一个类型
	//VideoCapture Vi(int index);//构造函数方式打开
	video.open("1.mp4");//打开当前目录文件
	if (!video.isOpened())//如果打开不成功//如果打开不成功可能是opencv_ffmpeg440.dll得库没有加载到当前目录
	{
		cout << "打开失败了" << endl;
		getchar();
	}

	

	namedWindow("video");//创建窗口

	/*********************************
	*视频文件得属性
	**********************************/

	int s = 30;//刷帧时间
	int fps = video.get(CAP_PROP_FPS);//获取视频得帧速率
	int fcount = video.get(CAP_PROP_FRAME_COUNT);//获取视频总帧数
	if (fps != 0)
	{
		s = 1000 / fps;//刷帧时间重定义
		int fs = fcount / fps;//视频得总秒数
	}


	


	Mat frame;//读取得一帧数据

	for (;;)//读取数据
	{
		//方式1
		/*if (!video.read(frame))//读取一帧视频判断是否读取结束
			//注意这个函数里包括读一帧解码 和转换格式 这两个又独立得函数可以独立调用当每秒有300帧可以只转换60帧也是比较流畅得
		{
			break;

		}

		if (frame.empty())break;//判断是否为空 用这个来判断读取视频是否结束
		imshow("video", frame);//显示一帧
		waitKey(5);//5毫秒一帧*/

		//方式2
		if (!video.grab())//读一帧并解码  读帧解码可能做好几次 转换格式可能只做一次当一秒超过300帧
		{
			break;
		}
		if(!video.retrieve(frame))//rgb转换格式
		{
			break;
		}

		int cur = video.get(CAP_PROP_POS_FRAMES);//获取当前得帧位置
		if (cur == fcount - 1)//如果当前帧数等于总帧数
		{
			video.set(CAP_PROP_POS_FRAMES, 0);//就把当前帧数设置为0 从头开始播放
			continue;
		}


		if (frame.empty())break;//判断是否为空 用这个来判断读取视频是否结束
		imshow("video", frame);//显示一帧
		waitKey(s);//5毫秒一帧
	}
	
	getchar();
	video.release();//关闭



	return 0;
}

//摄像头录制视频

int main(int argc, char* argv[])
{
#include<videoio.hpp>
	VideoCapture video(0);//打开摄像头
		
	if (!video.isOpened())//如果打开不成功//如果打开不成功可能是opencv_ffmpeg440.dll得库没有加载到当前目录
	{
		cout << "打开失败了" << endl;
		getchar();
	}

	namedWindow("video");//创建窗口

	Mat img;//读取得一帧数据

	for (;;)//相机取帧 并写入到文件
	{

		video.read(img);//从相机中读取一帧数据到img
		if (img.empty())break;//判断是否为空 用这个来判断读取视频是否结束
		if (waitKey(5) == 'q')break;//5毫秒检测一次如果按下q就退出
		imshow("video", img);//显示内容

		VideoWriter vw;//视频写入器
		int fps = video.get(CAP_PROP_FPS);//获取相机得速率
		if (fps <= 0)fps = 25;//如果速率获取不到就设置为25

		//创建一个视频以h2468格式指定视频得宽高就是一帧图片得宽高 最后一个参数表示颜色是rgb 这边必须一致如果是灰度图那么mat也应该是灰度图
		vw.open("out.avi", VideoWriter::fourcc('h', '2', '6', '4'), fps, Size(video.get(CAP_PROP_XI_WIDTH),video.get(CAP_PROP_XI_HEIGHT)),true);
		if (vw.isOpened())
		{
			cout << "创建视频错误了" << endl;//需下载openh264得库拷到当前目录
		}
		vw.write(img);//写入一帧图片

	}

	video.release();//关闭

	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv&&ffmpeg 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 使用 libavcodec 提取音频样本

    我对如何从 AVFrame 中的数据提取双值感到困惑 我正在尝试提取帧 我尝试检查用 CPython 编写的 av 模块背后的源代码 尤其是 AudioFrame 来尝试了解它从何处解码样本 https github com PyAV Or
  • 如何绘制每个分割对象的轮廓

    我应用分水岭分割来检测触摸对象 这样做效果很好 现在 我想绘制每个对象的轮廓 这样我就可以获得它们的长度 面积 矩等 但是分割结果中的对象仍然是触摸的 所以 我没能画出每一个的轮廓 如何绘制每个对象的轮廓 include
  • Bash while 循环等待任务完成

    我创建了一个 bash 脚本来处理文件夹及其子文件夹中的视频 find type f name mkv while read file do ffmpeg i file done 问题 它不是 while 循环等待 ffmpeg 完成 而是
  • Python 2.7从非默认目录打开多个文件(对于opencv)

    我在 64 位 win7 上使用 python 2 7 并拥有 opencv 2 4 x 当我写 cv2 imread pic 时 它会在我的默认 python 路径中打开 pic 即C Users Myname 但是我如何设法浏览不同的目
  • 从图像创建视频时,每秒减慢 ffmpeg 的图像速度

    我有一系列演示的屏幕截图 我想将其放入视频中 我正在使用 ffmpeg 为此目的 命令是ffmpeg f image2 i screenshot 5d png vcodec mpeg4 demo avi 不过 视频长度比我想要的要短 而且移
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 如何根据图像中的对象大小(以像素为单位)来测量现实世界中的对象大小(例如英寸、厘米等)?

    我计算了物体的大小pixel来自包含对象的图像 我想测量现实世界中物体的大小 有没有办法找出乘数来测量实际尺寸 我目前正在使用python以便实施 通常 您将使用相机获取图像 该相机通过镜头将 3 维场景投影到 2 维传感器上 垂直 高度
  • OpenCV RGB转灰度

    我正在做一个视频监控项目 我看不到从 RGB 到灰度的转换 我为灰色设置了黑色窗口 你能帮我解决这个问题吗 附代码 另外 如何获得当前帧和前一帧之间的差异 多谢 宜兰 include stdafx h include
  • 如何用OpenCV绘制圆角矩形(带圆角的矩形)?

    如何在 OpenCV 中绘制圆角矩形 我知道函数 ellipse 和 line 可以简单地放在一起来绘制它 我只是想知道是否有人以前做过并将其放入适当的函数中以便我可以使用它 理想情况下 拐角半径是在参数中校准的 我搜索了很多 但似乎以前没
  • opencv潜在支持向量机[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用基于部件的模型进行对象分类
  • 如何在不使用OpenCV Python中的split函数的情况下获取图像的单一颜色通道?

    我想强调一下用于实时手势识别的手 我观察到 使用 cv2 imsplit 函数 手的图像对于不同的颜色通道会以不同的方式突出显示 但这种分割功能在时间上是非常昂贵的 我无法使用 Numpy 索引执行相同的功能 如官方网站 https doc
  • OpenCV/FFMpeg 图像捕获问题

    我正在尝试从网络摄像机实时捕获图像 该流在 VLC 中运行得很好 但 OpenCV 的cvQueryFrame 似乎使传入的图像变得混乱和损坏 以至于无法识别 同样 从文件捕获可以正常工作 但实时流则不行 为了以防万一 我使用了 rtsp
  • OpenCV C++ cv::convexityDefects 错误

    vector
  • HOGDescriptor 带有视频来识别物体

    不幸的是 我既是 python 又是 openCV 初学者 所以如果问题很愚蠢 请原谅我 我正在尝试使用cv2 HOGDescriptor识别视频中的物体 我关心的是逐帧识别 即没有跟踪等 这是我正在做的事情 我读了视频 目前是 mpg 通
  • 分析手绘流程图

    我正在尝试检测手绘图中的对象和文本 我的目标是能够 解析 类似的东西this https hlksow dm1 livefilestore com y2pWx IR9GGEpEPKUClCy0Ukpr7ymPXxcMsMFbPkjwOxgF
  • 使用 openCV 检测 ROI

    我正在做一项工作 我必须找到感兴趣的区域 ROI 然后对图像执行阈值 由于我不是计算机领域的 所以我遇到了一些困难 我开始尝试通过以下代码找到投资回报率 code string filename 2011 06 11 09 3A12 3A1
  • FindFundamentalMatrix 未找到基本矩阵

    我正在尝试使用以下方法恢复相机的运动 基本矩阵 以及给出的算法维基百科 https en wikipedia org wiki Fundamental matrix computer vision 为了 我需要找到基本矩阵 我在用OpenC
  • Android 中的“ffmpeg 有文本重定位”错误

    我正在构建一个 Android 视频发送应用程序 我需要在上传之前对视频进行压缩 在本例中 我选择使用 FFmpeg 的 Android 包装器 https github com hiteshsondhi88 ffmpeg android
  • 在 Qt 5.12 的 OpenCV dll 上找不到入口点

    TLDR 将 OpenCV 与 QT MingW 链接会使应用程序在调试时崩溃 但不会在发布时崩溃 我正在尝试在基于 Qt 的大型多操作系统项目中使用 OpenCV 我已经轻松地为 Mac 和 Linux 构建了 OpenCV 但在 Win

随机推荐