OpenCV Qt下入门

OpenCV的库实在以前就编译过的,当时也没记录下来,回头再整理,今天就是在Qt下创建控制台程序,我直接贴出源码,一句一句的说明,其实这些代码也是按照书里来的,我给翻译一下,再加入一点我自己的理解,大家可以去看原文

1、创建一个Qt的控制台程序

2、修改项目配置文件.pro文件            

QT       += core
QT       -= gui

TARGET = opcvtest
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp
###注意添加此行,表示增加OpenCV的头文件目录为系统目录
INCLUDEPATH +=  D:\OpenCV\include

###此为增加库文件目录-L选项在gcc下就是添加库文件目录,而-l则为添加库文件
LIBS += -LD:\OpenCV\lib  \
-lopencv_core230.dll  \
-lopencv_highgui230.dll  \
-lopencv_imgproc230.dll  \
-lopencv_features2d230.dll  \
-lopencv_calib3d230.dll
3、main.cpp替换为下列代码

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
#include<string>
int main(int argc, char *argv[])
{
    //利用sdl标准库string保存文件目录,注意'\'需要转义
    std::string dir="I:\\photo\\info_indexbg.png";
    //创建一个图像的存储矩阵容器,Mat包含一个头信息和数据信息
    //头信息包含了图像的一些数据,默认创建图像宽高为0,可以用Mat的size()方法获取宽高
    cv::Mat image;
    //宽高均为0
    std::cout << "size: " << image.size().height << " , "
              << image.size().width << std::endl;
    //读取文件
    image = cv::imread(dir);
    //如果读取失败的话Mat的data变量为空
    if (!image.data) {
       std::cout<<"no data be read\n";
       return 0;
    }
    //再次输出图像大小
    std::cout << "size: " << image.size().height << " , "
              << image.size().width << std::endl;
    //创建一个Windows窗口,其实我在程序中屏蔽调这句也正常输出了图像,具体不知道为啥
    cv::namedWindow("我的图片");

    //我们在申请一个Mat容器,用于存放修改后图像
    cv::Mat result;
    //OpenCV 提供了很多图像处理函数,下面函数提供了图像反转的功能
    cv::flip(image,result,-1); //正数水平反转
                              // 0垂直反转
                              //负数水平垂直一起反转
    //显示反转的图片
    cv::imshow("我的图片",result);
    //将反转后的图像写入文件,估计OpenCV会自动根据你写入文件的扩展名保存为不同类型,我测试jpg和png,保存后大小不一样
    cv::imwrite("output.png", result);
    
    //图像等待输入时间
    cv::waitKey(0);  //0则一直等待,单位ms
    return 0;
}

4、简单介绍一下Mat类型

Mat类型是OpenCV图像存储的基本类型,而OpenCV对该类型提供了自动的内存管理,并且优化了拷贝,通常情况下的复制仅仅复制个Mat类型的头信息,数据还指向原数据,如下:

cv::Mat ima(240,320,CV_8U,cv::Scalar(100));
cv::Mat image2, image3;
image2= ima; // 两个容器指向相同的图像数据
ima.copyTo(image3); //图像数据进行了copy

CV_8U 这个8表示8位数据,U表示unsigned的,S表示signed,CV_8UC3  C3表示3个通道


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值