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;}
效果图 :
源代码文件下载 :
点击打开链接
如果有什么问题请回复 !
阅读全文
1 0
- opencv
- openCV
- openCV
- Opencv
- opencv
- opencv
- opencv
- OpenCV
- OpenCV
- OpenCV
- OpenCV
- opencv
- Opencv。。
- OpenCV
- opencv
- opencv
- opencv
- opencv
- springMVC通过getBean()获取context.xml文件中定义的service接口类
- php流程控制的goto
- webpack配置文件详解(二)
- C++实现一个复数类
- MFC整型和字符串互相转换
- opencv
- 添加好友(快速幂 金马五校赛-上海大学)
- extern "c"{}
- Ubuntu遇到的错误总结
- Java精选笔记_JSTL(JSP标准标签库)
- 强联通注意点
- deepin激活SCRT
- 存储过程简介
- 字符串进制转换(进制转换 金马五校赛-上海大学)