OpenCV进阶

一、邂逅OpenCV

1.OpenCV2到OpenCV3的错误

添加头文件“#include <cv.h>”,可以轻松让OpenCV3认识旧版本的宏定义的前缀“CV_”

2.debug 下可以运行,release下不可以运行

eg:因为字符串读取问题引起的诸如图片加载不了、指针越界、内存错误

简单粗暴的方法:

把debug和release下的 .lib 依赖库 都添加进去  =+=

3.简单Demo

图像腐蚀(erode)
 

#include <opencv2/highui/highui.hpp>    //OpenCV highgui模块头文件
#include <opencv2/imgroc/imgroc.hpp>  //OpenCV图像处理头文件

using namespace cv;              //包含cv命名空间
int main()
{ 
  //载入原图
  Mat srcImage = imread("1.jpg");
  //显示原图
  imshow("【原图】腐蚀操作" , srcImage);

  //进行腐蚀操作
  Mat element = getStrucingElement(MORPH_RECT,Size(15,15));
  Mat dstImage;
  erode(srcImage,dstImage,element);

  //显示效果图
  imshow("【效果图】腐蚀操作",dstImage);

  waitKey(0);
  return 0;

}

图像模糊(均值滤波操作blur)

blur(srcImage,dstImage,Size(7,7));

边缘检测Canny算子

 

载入图像,并将其转成灰度图,再用blur函数进行图像模糊以降噪,然后用canny函数进行边缘检测,最后进行显示。

#include <opencv2/highui/highui.hpp>    //OpenCV highgui模块头文件
#include <opencv2/imgroc/imgroc.hpp>  //OpenCV图像处理头文件

using namespace cv;              //包含cv命名空间
int main()
{ 

  Mat srcImage = imread("1.jpg");
  imshow("【原图】边缘检测" , srcImage);
  Mat edge,grayImage;

  //【1】将原始图转换为灰度图像
  cvtColor(srcImage,grayImage,cv_BGR2RAY);
  
  //【2】先用3X3内核来降噪
  blur(grayImage,edge,Size(3,3));
  
  //【3】运行sunny算子
  Canny(edge,edge,3,9,3);
  
  //【4】显示效果图
  imshow("【效果图】腐蚀操作",dstImage);

  waitKey(0);
  return 0;

}

4.视频操作

4.1读取视频

首先,先定义一个Mat变量,用于存储每一帧的图像,接着读取当前帧到Mat变量中,然后调用imshow显示当前的这一帧图像,并用waitKey延迟30毫秒,开始下一次循环。

#include <opencv2/opencv.hpp>
using namespace cv;


int main()
{ 

  //【1】读入视频
  VedioCapture capture("1.avi");

  //【2】循环显示每一帧
  while(1)
  {
     Mat frame;  //定义一个变量Mat,用于存储每一帧图像
     capture>>frame; //读取当前帧

    //若视频播放完成,退出循环
    if(frame.empty())
    { 
       break;
    }

    imshow("【读取视频】,frame"); //显示当前帧
    waitKey(30);
  }
  
  return 0;

}

4.2调用摄像头

#include <opencv2/opencv.hpp>
using namespace cv;


int main()
{ 

  //【1】从摄像头读入视频
  VedioCapture capture(0); //参数设为0  表示调用摄像头

  //【2】循环显示每一帧
  while(1)
  {
     Mat frame;  //定义一个变量Mat,用于存储每一帧图像
     capture>>frame; //读取当前帧

     imshow("【读取视频】,frame"); //显示当前帧
     waitKey(30);  //延迟30ms
  }
  
  return 0;

}

下面,通过调用摄像头来配合canny边缘检测,得到canny边缘检测并高斯模糊后的摄像头采集视频

#include <opencv2/opencv.hpp>
using namespace cv;


int main()
{ 

  //从摄像头读入视频
  VedioCapture capture(0); //参数设为0  表示调用摄像头
  Mat edges;

  //循环显示每一帧
  while(1)
  {
     //【1】读入图像
     Mat frame;  //定义一个变量Mat,用于存储每一帧图像
     capture>>frame; //读取当前帧

     //【2】将原图像转换为灰度图像
     cvtColor(frame,edges,COLOR_BGR2GRAY);//转化BRG彩色图为灰度图

     //【3】使用3X3内核降噪(2X3+1 = 7)
     blur(edges,edges,Size(7,7));

     //【4】进行canny边缘检测并显示
     Canny(edges,edges,0,30,3);
     imshow("【被Canny后的视频】",edges); //显示当前帧
     if( waitKey(30) >= 0) break;  //延迟30ms
  }
  
  return 0;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值