opencv

来源:互联网 发布:淘宝网针织连衣裙 编辑:程序博客网 时间:2024/06/05 08:02

前一段时间领导让弄一个A柱的一个小功能 , 遇到了不少的难题(毕竟没有接触过 , 当时听见opencv都一脸懵逼) , 不过最后经过百般的努力 , 终于基本的功能已经实现啦 !

当然能定有错误的地方 , 也希望大家能够指出 !


以下面代码实现 :

     摄像头的放大

    摄像头的缩小

    摄像头的旋转

    摄像头的裁剪

    摄像头的数据保存


#include "opencv2/core.hpp"#include "opencv2/highgui.hpp"#include "opencv2/opencv.hpp"using namespace cv;//取中间区域int up_down_move = 190;int left_right_move = 0;//摄像头显示大小int captureWidth = 1280;int captureHeight = 720;//裁剪大小int width = 1280;int height = 366;// 旋转角度  double angle = 0;  // 缩放尺度  double scale = 1.0; int main(){int mode;//用来存放读取的视频序列Mat frame;//定义一个用来控制读取视频循环结束的变量  bool stop = false;int key;printf("请选择摄像头 '0' 内置 '1' 外置");    scanf("%d", &mode);//创建VideoCapture对象VideoCapture capture(mode);//判断是否打开摄像头if (capture.isOpened())        {printf("打开成功!"); FileStorage read("parameter.yml", FileStorage::READ);if(read.isOpened()){angle = (int)read["angle"];scale = (double)read["scale"];up_down_move = (int)read["up_down_move"];left_right_move = (int)read["left_right_move"];}read.release();}else{printf("打开失败!"); }cvNamedWindow("Carmera"); cvMoveWindow("Carmera", 0, 0);capture.set(CV_CAP_PROP_FRAME_WIDTH, captureWidth);      capture.set(CV_CAP_PROP_FRAME_HEIGHT, captureHeight);//获取帧率    //double rate = capture.get(CV_CAP_PROP_FPS);  //两帧间的间隔时间    //int delay = 1000/rate;//滤波器的核int kernel_size = 3;      Mat kernel = Mat::ones(kernel_size,kernel_size,CV_32F)/(float)(kernel_size*kernel_size);      while (!stop)    {//读取frame        capture >> frame;if(frame.empty())break;key = cvWaitKey(2);if(key==1048603){stop = true;break;}switch(key)        {//上case 1048695:  up_down_move -= 10;if(up_down_move <= 0)up_down_move = 0;break;  //下            case 1048691:  up_down_move += 10;if(up_down_move >= frame.rows*0.5)up_down_move = (frame.rows*0.5)-10;break;  //左            case 1048673:  left_right_move -= 10;if(left_right_move <= 0)left_right_move = 0;break;  //右            case 1048676:  left_right_move ++;if(width == captureWidth){left_right_move= 0;}else{if(left_right_move >= frame.cols*0.5)left_right_move=frame.cols*0.5; }break;  //保存case 1048687:{FileStorage write("parameter.yml", FileStorage::WRITE);write << "angle" << angle;write << "scale" << scale;write << "up_down_move" << up_down_move;write << "left_right_move" << left_right_move;write.release();}break;//放大case 1048637:scale+=0.1;if(scale >=10)scale = 10;break;//缩小case 1048621:scale-=0.1;if(scale<=1)scale = 1;break;//旋转+case 1048620:angle++;break;//旋转-case 1048622:angle--;break;//复位case 1048690:up_down_move = 190;left_right_move = 0;angle = 0;  scale = 1.0; break;        }//裁剪Rect rect(left_right_move,up_down_move,width, height);Mat temp(frame, rect);//加滤波程序 filter2D(temp,temp,-1,kernel);//-------------------------------------------------------------------------------------cv::Point2f center = cv::Point2f(temp.cols / 2, temp.rows / 2);cv::Mat rotateMat;       rotateMat = cv::getRotationMatrix2D(center, angle, scale);      cv::Mat rotateImg;      cv::warpAffine(temp, rotateImg, rotateMat, temp.size());imshow("Carmera",rotateImg);//-------------------------------------------------------------------------------------    }cvDestroyWindow("Carmera");capture.release();frame.release();return 0;}


效果图 :




源代码文件下载 :

点击打开链接


如果有什么问题请回复 !

原创粉丝点击