OpenCV常用小工具……

图像批量缩放(改名)小工具(OpenCV2.4.4+Qt5.2.1+MSVC2010):

#include <opencv2/opencv.hpp>//我很懒



using namespace std;

using namespace cv;



int main(){

    string src_img_name = "D:yaleface/";

    string dst_img_name = "D:yale/";

    char charn[3],chari[3],charj[3];

    

    //把s1.bmp..s165.bmp改名为i_sj.bmp并缩小图像

    for(int i=1;i<=15;i++){

        for(int j=1;j<=11;j++){

            _itoa((i-1)*11+j,charn,10);

            _itoa(i,chari,10);

            _itoa(j,charj,10);



            //输入文件夹的文件s1.bmp...s165.bmp

            src_img_name+="s";

            src_img_name+=charn;

            src_img_name+=".bmp";



            Mat src_img = imread(src_img_name,0);

            Mat dst_img;

            resize(src_img,dst_img,Size(40,40),0,0,INTER_LINEAR);



            //输出文件夹中的文件名1_s1..1_s11..2_s1..2_s11....15_s11.

            dst_img_name+=chari;

            dst_img_name+="_s";

            dst_img_name+=charj;

            dst_img_name+=".bmp";



            imwrite(dst_img_name,dst_img);

            src_img_name = "D:yaleface/";

            dst_img_name = "D:yale/";

            clog<<(i-1)*11+j<<endl;

        }

    }

}

 

2. 批量图片写成视频(OpenCV2.4.4+Qt5.2.1+MSVC2010):

#include <opencv2/opencv.hpp>

#include <iostream>



using namespace std;

using namespace cv;



int main(){

    //我的环境下所有目录都不能有中文.

    string dir_name = "F:/baiduyundownload/face/1_1_05(06)_0/prob/dongnanmeneast_15_1920x1080_30_R1/";

    char img_name[6];



    Mat img_src = imread("F:baiduyundownload/face/1_1_05(06)_0/prob/dongnanmeneast_15_1920x1080_30_R1/15980.jpg");

    if(img_src.empty())

        cerr<<"imread image error";



    VideoWriter output_src("D:faceDetect.avi",CV_FOURCC('M','J','P','G'),10,img_src.size(),1);

    //我的图片名是15980.jpg,15982.jpg...18000.jpg

    for(int i=15980;i<18000;i+=2){



        /****图片名字处理****/

        _itoa(i,img_name,10);

        dir_name+=img_name;

        dir_name+=".jpg";



        img_src=imread(dir_name);//显示

        if(img_src.empty())

            return 0;

        output_src<<img_src;//写入

        imshow("src",img_src);



        char c = waitKey(10);

        if(27==c)

            return 0;



        clog<<i<<endl;

        dir_name = "F:/baiduyundownload/face/1_1_05(06)_0/prob/dongnanmeneast_15_1920x1080_30_R1/";

    }

    return 0;

}

 

3. 读取视频序列:

#include <opencv2/opencv.hpp>



using namespace std;

using namespace cv;



int main(){

    VideoCapture capture("D:faceDetect.avi");

    if(!capture.isOpened()){

        clog<<"Read Video Error";

        return 0;

    }



    double videoFPS = capture.get(CV_CAP_PROP_FPS);

    int videoDelay = 1000/videoFPS;

    bool stop = false;

    Mat frame;



    while(!stop){

        if(!capture.read(frame))

            break;

        imshow("SHOW",frame);

        if(waitKey(videoDelay)>=0)

            stop = true;

    }

}

 stop可以提供外部控制接口,如果不需要的话,也可以简化如下:

#include <opencv2/opencv.hpp>



using namespace std;

using namespace cv;



int main(){

    VideoCapture capture("D:faceDetect.avi");

    if(!capture.isOpened()){

        clog<<"Read Video Error";

        return 0;

    }



    double videoFPS = capture.get(CV_CAP_PROP_FPS);

    int videoDelay = 1000/videoFPS;

    Mat frame;



    while(capture.read(frame)){

        if(frame.empty())

            break;

        imshow("Video Demo",frame);

        if(waitKey(videoDelay)==27)

            break;

    }

}

 

 4. 剪切视频段:

#include <opencv2/opencv.hpp>

#include <iostream>



using namespace std;

using namespace cv;



int main(){

    //打开原输入视频

    VideoCapture capture("C:tuike.avi");

    if(!capture.isOpened()){

        cout<<"open failed";

        return 0;

    }

    //设置剪切的起始位置

    double position = 31680;

    capture.set(CV_CAP_PROP_POS_FRAMES,position);



    //设置剪切后的视频属性

    Mat frame;

    capture.read(frame);

    VideoWriter output_video("D:suozixie1.avi",CV_FOURCC('M','J','P','G'),45,frame.size(),1);



    //循环剪切视频31681-40000帧

    while(position<=40000){

        if(!capture.read(frame)){

            cout<<"read failed";

            break;

        }

        output_video<<frame;

        position++;

    }

}

 

5. 读写摄像头:

#include <opencv2/opencv.hpp>



using namespace std;

using namespace cv;



int main(){

    VideoCapture camera(0);//打开默认摄像头

    if(!camera.isOpened()){

        clog<<"Read Video Error";

        return 0;

    }



    Mat frame;

    camera.read(frame);

    //写入的视频路径,编码方式,FPS,大小,彩色.

    VideoWriter video("D:try.avi",CV_FOURCC('M','J','P','G'),15,frame.size(),1);

    while(camera.read(frame)){

        if(frame.empty())

            break;

        imshow("Video Demo",frame);

        video<<frame;

        if(waitKey(33)==27)//ESC结束拍摄

            break;

    }

}

 

6. 从已知文本信息中分割图像:

#include <opencv2/opencv.hpp>

#include <iostream>

#include <fstream>

#include <string>



using namespace std;

using namespace cv;



int main(){

//从已知文本信息中分割图像

    ifstream input("D:ImageInfo.txt");

    string sinput;



    //我的环境下所有目录都不能有中文.

    string dir_name = "D:dongnanmeneast_15_1920x1080_30_R1/";

    string dst_name = "D:secface/";

    char img_name[6];



    input>>sinput;

    Mat img_src;

    for(int i=15980;i<=18080;i+=2){

        /****图片名字处理****/

        _itoa(i,img_name,10);

        dir_name+=img_name;

        dir_name+=".jpg";



        int n=0;

        while(((string)img_name+".jpg")==sinput.c_str()){

            //从txt文档中获取face的位置x,y,w,h.

            string l,t,r,b;

            input>>l>>t>>r>>b;

            int x = atoi(l.c_str());

            int y = atoi(t.c_str());

            int width = atoi(r.c_str())-x;

            int height = atoi(b.c_str())-y;

            

            //保存图像的名称

            char si[2];

            itoa(n,si,10);

            dst_name += img_name;

            dst_name +="_face";

            dst_name +=si;

            dst_name +=".jpg";

            

            //保存感兴趣区域即face图像

            img_src=imread(dir_name);//read

            Mat imgROI = img_src(Rect(x,y,width,height));

            imwrite(dst_name,imgROI);



            sinput = "";

            cout<<n<<endl;

            n++;

            input>>sinput;

            dst_name = "D:secface/";

        }

        dir_name = "D:dongnanmeneast_15_1920x1080_30_R1/";

        cout<<i<<endl;

    }

    cout<<"complete";

    return 0;

}

 

你可能感兴趣的:(opencv)