OpenCV之截取条码制作视频算法
由于条码识别项目由前期的图片识别改为视频流识别导致自己不得不自己制作视频以满足项目前期测试需求,故有了这个视频的制作
话不多少,直接上代码吧!
代码能直接运行
//截取条码制作视频算法
#include<opencv2/opencv.hpp>
#include<iostream>
#include<string>
using namespace std;
using namespace cv;
int main()
{
Mat Image = imread("E:/barcode/bar6.png"); //454*283
imshow("Image", Image);
vector<Mat> reImage; //进入
vector<Mat> reImage1; //出去
for (int i = 10; i < 454;)
{
if (i < 454)
{
Mat background(300, 500, CV_8UC3, Scalar::all(255));
Mat background1(300, 500, CV_8UC3, Scalar::all(255));
Mat roiImage = Image(Rect(454 - i, 0, i, 283));
Mat roiImage1 = Image(Rect(0, 0, 454 - (i - 10), 283));
Mat copyImage = background(Rect(0, 0, roiImage.cols, roiImage.rows));
Mat copyImage1 = background1(Rect(454 - roiImage1.cols, 0, roiImage1.cols, roiImage1.rows));
roiImage.copyTo(copyImage);
roiImage1.copyTo(copyImage1);
reImage.push_back(background);
reImage1.push_back(background1);
i += 10;
}
}
for (int i = 0; i < reImage1.size(); i++)
{
reImage.push_back(reImage1[i]);
}
char name[20];
VideoWriter video("E:/barcode/bar.mp4", CV_FOURCC('M', 'J', 'P', 'G'), 25, Size(500, 300));
for (int i = 0; i < reImage.size(); i++)
{
sprintf(name, "re%d", i);
imshow(name, reImage[i]);
video << reImage[i];
}
waitKey(0);
return 0;
}
OpenCV提供的写入视频的API
VideoWriter(const string& filename, int fourcc, double fps, Size frameSize, bool isColor=true)
各参数含义如下:
filename: 输出视频文件的路径及名称
fourcc:4-character code of
codec的缩写,四个字符用来表示压缩帧的编解码。
fps:帧率 frameSize:每帧图片的大小
isColor:如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧
其中第二个参数fourcc提供多种格式
CV_FOURCC(‘P’, ‘I’, ‘M’, ‘1’) = MPEG-1 codec
CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’) = motion-jpeg codec
CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2codec
CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec
CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263codec
CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
CV_FOURCC(‘F’,‘L’, ‘V’, ‘1’) = FLV1 codec
其中有不足的地方,欢迎交流指正!!!