QT+opencv学习笔记一 opencv配置及Mat浅拷贝

今天终于把Qt + opencv配置成功了,中间有一些曲折,在这里记录一下。

vs2013 + opencv的方法之前记录过,但这次的不太一样,我们一开始按照这篇文章配置pro

Qt5中进行OpenCV开发教程

但是,死活出不来结果,研究发现,我们用的是 mingw 不是 vs,这个方法适合vs编译器 (具体可以参考:win7下的Qt环境+OpenCV视觉库

后来,我们找到了这篇文章 QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置

但是还是有点曲折,

一开始没有勾选 WITH_QT

, 大家都懂的,gg了。

后来,重新弄的时候, 还勾选了 WITH_OPENGL, 因为中途系统崩溃过一次, QT虽然可以直接用, 但是环境变量中的path都不见了, 于是还是需要重新添加一下, path 环境变量的。

这边顺便记录一下我在 pro中添加的配置:

INCLUDEPATH += E:\opencv2.4.9\opencv\build_MinGW\install\include     E:\opencv2.4.9\opencv\build_MinGW\install\include\opencv     E:\opencv2.4.9\opencv\build_MinGW\install\include\opencv2

# ========================== x64 =======================
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_videostab249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_calib3d249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_contrib249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_core249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_features2d249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_flann249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_gpu249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_highgui249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_imgproc249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_legacy249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_ml249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_nonfree249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_objdetect249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_ocl249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_photo249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_stitching249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_superres249.dll.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_ts249.a
LIBS += E:/opencv2.4.9/opencv/build_MinGW/install/x64/mingw/lib/libopencv_video249.dll.a

以上是配置opencv部分

===============【我是华丽丽的分割线】========================

配置成功opencv之后, 对着书 抄了一段代码:

#include <opencv.hpp>
#include <iostream>

using namespace std;

void salt(cv::Mat &image, int n)
{
    for (int k = 0; k < n; k++)
    {
        int i = rand()%image.cols;
        int j = rand()%image.rows;

        if(image.channels() == 1) // 灰度图
        {
            image.at<uchar>(j, i) = 255;
        }
        else if(image.channels() == 3) // rgb 图
        {
            image.at<cv::Vec3b>(j, i)[0] = 255;
            image.at<cv::Vec3b>(j, i)[1] = 255;
            image.at<cv::Vec3b>(j, i)[2] = 255;
        }
    }
}

int main()
{
    cv::Mat image = cv::imread("E:\\system dir\\Desktop\\1_5.jpg");
    salt(image, 3000);
    cv::namedWindow("Image", 1);
    cv::imshow("Image", image);
    cv::waitKey(0);
    return 0;
}

这段代码实现的功能很简单, 导入一张图片, 并添加椒盐噪声。

这里需要注意的一点是:

void salt(cv::Mat &image, int n)
void salt(cv::Mat image, int n)

在opencv中, 这两种形式都是可以达到添加噪声的效果的, 个人理解,原因在于opencv的 Mat 本质上是一个智能指针,即使是作为形参传递给函数, 也只是将他的引用计数加1. 换句话说实际上是浅拷贝。

因而, 加不加 & 都是OK的<^_^>

但是, 还是建议添加引用符号, 看上去更加容易理解一些。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-23 14:57:37

QT+opencv学习笔记一 opencv配置及Mat浅拷贝的相关文章

openCV学习笔记(6):Mat类/数据结构详解(1)

Mat类不仅可以用于图像存储,同时也是一个通用的矩阵类,可以用来创建和操作多维矩阵,以后将会更新将Mat作为矩阵类的学习笔记.本文重点在于重新学习Mat类的结构,主要是重要成员变量和构造函数. 一.Mat类 Mat类中关键属性如下所示: //Mat类 class CV_EXPORTS Mat { public: //一系列函数 /* 包括几位字段: -Mat的标识 -连续性标志 -深度(位深) -通道数 */ int flags; //矩阵的维数,取值> = 2 int dims ; //矩阵的

OpenCV学习笔记一 OpenCV 2.49 + Eclipse 配置教程

1.安装opencv库 1.1 双击opencv-2.4.9.exe,安装到指定目录. 1.2安装VC2010运行库,百度搜索VC2010运行库,下载安装即可.如果完成下面的所有配置之后运行程序时提示还缺少dll等文件,需要用360修复,进入人工服务,搜索提示缺少的dll文件,点击修复即可. 1.3将opencv\build\x86\vc11路径下的bin.lib.staticlib三个文件夹的路径添加到环境变量中. 2.配置Eclipse 2.1 新建一个工程file -> new -> c

OpenCv学习笔记(三)---OpenCv中基本数据类型--Point,Size,Rect,Scalar,Vec3b类类型的详细解释及其OpenCv中源代码的详细分析

/********************************************************************************************* 程序功能: OpenCv的基本数据结构源代码的解读,我们常用的OpenCv的基本数据结构有六种: 1--Point类 2--Size类 3--Rect类 4--Scalar类 5--Vec3b--向量模板类 6--Range类 编写环境: OpenCv2.4.8+VS2010 地点时间: 陕西师范大学 201

OpenCv学习笔记(一)----OpenCv中Mat类源码的详细解读(2)

(一)像素存储的方法 1--本节我们讲解如何存储像素,存储像素值,需要指定: 1--颜色空间 2--数据类型 2--其中,颜色空间是指针对一个给定的颜色,如何组合颜色以其编码. 3--最简单的颜色空间是----灰度级空间----只需要处理:黑色和白色,对它们进行组合便可以产生不同程度的灰 色(256灰度级) 4--对于彩色方式---则有更多种类的颜色空间,但不论那种方式,都是把颜色分成:三个或者四个---基元素,通过 组合基元素,就可以产生所有的颜色 1--RGB颜色空间是最常用的一种颜色空间,

OpenCv学习笔记(七)---OpenCv中的基本绘图函数,圆,椭圆,线段,矩形,多边形的绘制(1)

(一)本节教程的目的 本节你将学到: 1--如何使用Point在图像中定义2D点 2--如何以及为何使用Scalar 3--用OpenCv的函数Line绘直线 4--用OpenCvd的函数ellipse绘制椭圆 5--用OpenCv的函数rectangle绘矩形 6--用OpenCv的函数circle绘圆 7--用OpenCv的函数fillPoly绘填充多边形 (二)原理,本节我们将大量使用Point和Scalar这两个结构: **********************************

[OpenCV学习笔记1][OpenCV基本数据类型]

CvPoint基于二维整形坐标轴的点typedef struct CvPoint{int x; /* X 坐标, 通常以 0 为基点 */int y; /* y 坐标,通常以 0 为基点 */}CvPoint;/* 构造函数 */inline CvPoint cvPoint( int x, int y );/* 从 CvPoint2D32f 类型转换得来 */inline CvPoint cvPointFrom32f( CvPoint2D32f point ); CvPoint基于二维整形坐标轴

OpenCV学习笔记(01)我的第一个OpenCV程序(环境配置)

昨天刚刚考完编译原理,私心想着可以做一些与考试无关的东西了.一直想做和图像处理相关的东西,趁这段时间有空学习一下OpenCV,搭建环境真是一件麻烦的事情,搞了近三个小时终于OK了.先来张图: 大致描述一下步骤吧: 一.安装前准备 1.VS2012(网上看到很多用的VS2010,但是基本不影响) 2.OpenCV 安装包(我下载的是最新的2.4.9) 二.安装OpenCV 1.解压OPenCV 说是安装,其实就是解压,OpenCV的Windows安装程序就是一个自解压程序: 这里我解压到C:\Pr

Opencv学习笔记(六)SURF学习笔记

原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. 看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习. SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高.它和SIFT的主要差别是图像多尺度空间的构建方法不同. 在计算视觉领域,尺度空间被象征性的表述

opencv学习笔记(四)投影

opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: 1 #include <cv.h> 2 #include <highgui.h> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 IplImage * src = cvLoadImage("cat.png", 0); //强制转化读取图像为灰度图 8 cvShowImage("灰度图像", s