qt下OpenCV编程例子笔记一

本文档记录了在Qt中使用OpenCV进行图像处理的一系列例子,包括读取与显示图片、图像创建与保存、Canny边缘检测、轮廓检测、图像旋转缩放、视频处理、Hough线段检测、鼠标交互以及Yml文件操作等。
摘要由CSDN通过智能技术生成

以下所有例子来源于http://wiki.opencv.org.cn

一、读入图片显示

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"

#if 1
using namespace cv;
int main() {
    //声明IplImage指针
    IplImage* pImg;
    //载入图片
    pImg=cvLoadImage("../Lena.jpg",CV_LOAD_IMAGE_COLOR);  //C:\2.jpg 要使用'/' 而不是windows的 '\'
    if(NULL==pImg)
    {
        printf("image can't read!\n");
        return -1;
    }
   // Mat image(pImg); //有这句话,为什么会出错
    //创建窗口
    //cvNamedWindow("Image",CV_WINDOW_AUTOSIZE);  // 为什么注释掉这句话,程序尼玛也运行
    //显示图像
    cvShowImage("Image",pImg);
    //等待按键
    cvWaitKey(0);
    //销毁窗口
    cvDestroyWindow("Image");
    //释放图像
    cvReleaseImage(&pImg);     // 为什么我把这条语句放在cvWaitKey前面时,窗口任然有图像显示,放在cvShowImage前面时才没有图片显示
    return 0;
}
#else
    #if 0
    using namespace cv; //下面函数要cv前缀
    int main()
    {
        Mat image;
        image=imread("C:/2.jpg");
        imshow("li",image);
        waitKey();
        return 0;
    }
    #else
    using namespace cv;//下面的所有cv相关类型不用加上前缀了,这里的前缀为cv::
    int main(int argc, char* argv[])
    {
        Mat img = imread("Lena.jpg"); //声明Mat变量并调入lena的照片,图片放在工程目录中直接使用"Lena.jpg"不行,要把图片放在工程目录的上一层
        //然后使用../Lena.jpg,对于使用vs的这使用..\\Lena.jpg,第一个\为转义字符

        if(!img.data) //判断图片调入是否成功
             return -1; //调入图片失败则退出
        //创建窗口,并确定其为大小不可变类型窗口
        namedWindow("loveLena", CV_WINDOW_AUTOSIZE);

        //显示图片。如果你不介意窗口大小可变,可以直接注释掉上一句。因为imshow可以直接创建窗口
        imshow("loveLena", img);

        waitKey(); //等待按键

        return 0;
}

    #endif
#endif

二、图像创建、保存和复制

最终在工程目录上一级目录中生成copy.jpg

#include "cv.h"
#include "highgui.h"

int main( int argc, char** argv )
{
    IplImage* pImg; //声明IplImage指针

    //载入图像,强制转化为Gray
    pImg = cvLoadImage("../Lena.jpg", 0);
    if(pImg != NULL )
    {
      IplImage* pImg2 = cvCreateImage(cvGetSize(pImg),
                      pImg->depth,
                      pImg->nChannels);
      cvCopy(pImg, pImg2, NULL);

      cvSaveImage("../copy.jpg", pImg2);//把图像写入文件

      cvNamedWindow( "Image", 1 );//创建窗口
      cvShowImage( "Image", pImg );//显示图像

      cvWaitKey(0); //等待按键

      cvDestroyWindow( "Image" );//销毁窗口
      cvReleaseImage( &pImg ); //释放图像
      cvReleaseImage( &pImg2 ); //释放图像
      return 0;
    }

  return -1;
}

三、canny边缘检测

重点函数:

cvCanny(pImg, pCannyImg, 50, 150, 3);

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"

int main( int argc, char** argv )
{

  //声明IplImage指针
  IplImage* pImg = NULL;
  IplImage* pCannyImg = NULL;

  //载入图像,强制转化为Gray
  pImg = cvLoadImage("../Lena.jpg", 0);

  if(pImg != NULL )

    {
      //为canny边缘图像申请空间
      pCannyImg = cvCreateImage(cvGetSize(pImg),
                      IPL_DEPTH_8U,
                      1);

      //canny边缘检测
      cvCanny(pImg, pCannyImg, 50, 150, 3);

      //创建窗口
      cvNamedWindow("src", 1);
      cvNamedWindow("canny",1);

      //显示图像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值