注:原创不易,转载请务必注明原作者和出处,感谢支持!

一 写在开头

1.1 本文内容

本文的内容涉及了OpenCV 3.4.2在Ubuntu 16.04 LTS下的安装,OpenCV中图像的加载,显示,修改和保存等。

二 涉及的API

本文中涉及到的OpenCV API如下。这里只简要概括API的功能,API详细用法请参阅权威的官方文档。

  • Mat cv::imread(const String &filename, int flags = IMREAD_COLOR);

imread()用于读取图片文件,读取到的图片以Mat对象返回。filename为图片路径名。flags用于控制图片的读取。如果读取失败,Mat.empty()会返回true,Mat.data会被设置为NULL。

  • void cv::namedWindow(const String &winname, int flags = WINDOW_AUTOSIZE);

namedWindow()用于创建window,创建的window可以用作图像(Mat对象)的placeholder。可以理解为window是用于盛放并显示图像的容器。winname是window的名字,winname会被imshow()方法引用。flags决定了window的类型,常用的取值为WINDOW_AUTOSIZE。

  • void cv::imshow(const String &winname, InputArray mat);

imshow()用于显示图像。winname是盛放图像的window的名字,mat为图像对象。

  • void cv::cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0);

cvtColor()用于转换图片的颜色空间(color space),比如常用的RGB颜色空间等。src为原图像,dst为转换后的图像,code表示颜色空间转换代码,比如COLOR_BGR2GRAY表示将RGB的彩色图转换成灰度图。

  • bool cv::imwrite(const String &filename, InputArray img, const std::vector &params = std::vector());

imwrite()用于将图像写入文件中。filename是文件名,img表示要被写入文件的Mat对象,params表示参数向量。

  • int cv::waitKey(int delay = 0);

waitKey()用于等待按键按下事件。delay表示延迟的时间。

三 OpenCV 3.4.2在Ubuntu 16.04 LTS下的编译安装

关于OpenCV的安装请参考官方提供的文档:Installation in Linux。我尝试过在Ubuntu 16.04 LTS中编译安装最新的OpenCV 4.0版本,但在安装过程中出现了严重的错误,没能成功安装。在我将版本降至3.4.2时才成功。

四 OpenCV安装测试与图像的加载和显示

4.1 安装测试

下面这个小实例用于测试OpenCV是否成功安装。之所以不同时使用using namespace std和using namespace cv是因为OpenCV库中有一些外部名和C++ STL中的名字冲突。

#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv; int main(int argc, char *argv[])
{
Mat src = imread("../images/lena.jpg", IMREAD_COLOR);
if (src.empty())
{
std::cout << "Could not load image..." << std::endl;
return -1;
} namedWindow("Test OpenCV Install", WINDOW_AUTOSIZE);
imshow("Test OpenCV Install", src); waitKey(0);
return 0;
}

使用下列命令来编译上面的cpp文件。

g++ -g -Wall -std=c++11 Test-OpenCV-Install.cpp -o Test-OpenCV-Install `pkg-config --cflags --libs opencv`

如果一切无误,使用命令./Test-OpenCV-Install运行可执行文件,可以看到如下图所示的结果。

4.2 图像的加载和显示

版本1

#include <cstdio>
#include <opencv2/opencv.hpp> using namespace cv; int main(int argc, char *argv[])
{
if (argc != 2)
{
printf("usage : DisplayImage.out <image_path>\n");
return -1;
} Mat img = imread(argv[1], IMREAD_COLOR);
if (!img.data)
{
printf("No image data...\n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE);
imshow("Display Image", img); waitKey(0);
return 0;
}

编译并运行上述版本,结果如下。

版本2

#include <opencv2/opencv.hpp>
#include <iostream>
#include <string> using namespace cv; int main(int argc, char *argv[])
{
// default image name
std::string imgName("../images/lena.jpg"); if (argc > 1)
imgName = argv[1]; // load image file
Mat img = imread(imgName, IMREAD_COLOR);
if (img.empty())
{
std::cout << "Could not load image..." << std::endl;
return -1;
} // create a image placeholder and show the image inside it
namedWindow("Display Image", WINDOW_AUTOSIZE);
imshow("Display Image", img); // wait for a key press
waitKey(0);
return 0;
}

编译并运行上述版本,结果如下。

五 图像的修改和保存

#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char *argv[])
{
if (argc != 3)
{
std::cout << "usage : convert.out <src_img_path> <des_img_path>" << std::endl;
return -1;
} Mat src = imread(argv[1], IMREAD_COLOR);
if (src.empty())
{
std::cout << "could not load image..." << std::endl;
return -1;
} Mat src_gray;
cvtColor(src, src_gray, COLOR_BGR2GRAY);
imwrite(argv[2], src_gray); namedWindow(argv[1], WINDOW_AUTOSIZE);
namedWindow(argv[2], WINDOW_AUTOSIZE);
imshow(argv[1], src);
imshow(argv[2], src_gray); waitKey(0);
return 0;
}

编译并运行上述版本,结果如下。

六 参考资料

  1. OpenCV文档

OpenCV初步的更多相关文章

  1. Android NDK开发及OpenCV初步学习笔记

    https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...

  2. 图像处理和OpenCV初步

    图像从数学和计算机的角度理解就是一个矩阵,矩阵中的每一个元素叫做像素,又由于图像有灰度图像和彩色图像之分,所以图像在矩阵的基础上引入通道(channel),其中色彩用数字来表示的时候,规定数字0表示黑 ...

  3. Ubuntu中搭建强化学习平台(使用anaconda管理Python并安装tensorflow、opencv)

    首先介绍一下anaconda,annoconda是一个开源的Python发行版本,里面集成了python.conda等多个科学包及其依赖项.安装完成之后,就可以使用conda版本管理器进行管理,可以让 ...

  4. OpenCV坐标体系的初步认识

    实验基础 本次实验通过一个简短的例子,主要来说明下面4个问题: 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat, ...

  5. 对OpenCV中seamlessClone的初步实验

    seamlessClone是OpenCV中新出现的函数,应该说如果能够基于较为准确的图像分割,能够得到很好的结果. 原始的前景,背景 三种flag下的融合结果   //注意头文件中添加  #inclu ...

  6. opencv学习HighGUI图形用户界面初步【1】

    HighGUI是图形用户界面模块.包括:1.输入与输出:2.视频捕捉:3.图形和视频的解码编码:4.图形交界面与接口. 由于opencv.hpp包含了core.objdetect.ingproc.ph ...

  7. opencv 1 HighGUI图形用户界面初步

    1图像载入 显示和输出到文件 Opencv的命名空间 Mat类 图像的载入:imread()函数 图片的显示:imshow()函数 创建窗口:namedWindow()函数 输出图像到文件:imwri ...

  8. OpenCV学习(1)——初步接触

    一.介绍OpenCV           OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开 ...

  9. ubuntu下安装配置OpenCV

    Cmake的安装 我用的是ubuntu-software自动下载安装的. Ubuntu 下安装 OpenCV 首先下载安装相关包,然后下载OpenCV 系统:ubuntu16.04 OpenCV:2. ...

随机推荐

  1. MySQL数据库在IO性能优化方面的设置选择(硬件)

    提起MySQL数据库在硬件方面的优化无非是CPU.内存和IO.下面我们着重梳理一下关于磁盘I/O方面的优化. 1.磁盘冗余阵列RAID RAID(Redundant Array of Inexpens ...

  2. C#的扩展方法(this)

    先在StringLibrary类中定义一个静态方法,如下: public static class StringLibrary { //第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰 ...

  3. thinkPHP HTML输出多条查询结果

    控制端 $select=M('Baojiao')->query("select * from think_Baojiao where COMPANY='$comname'") ...

  4. THINKphp中复杂的查询

    字符串拼接查询 案例一:拼接字符串(多条件查询) $where = ''; //定义字符串,用于拼接满足条件的数据字段 $value = []; // 定义空数组,用于接收值 if(!empty($n ...

  5. gradle下载及配置

    windows安装 1.下载地址:http://services.gradle.org/distributions/ 2.下载**-bin.zip,解压即可 配置环境变量:gradle_home:D: ...

  6. Active Directory Replication(复制)

    KCC(The Knowledge Consistency Checker)知识一致性检查器是一个内置的程序,在所有与管理器上运行,为林创建复制拓扑.默认,KCC15分钟间隔运行一次,根据当时存活的最 ...

  7. Python-语法模板大全(常用)

    目录 1.怎么存数据 变量: 字符串: 不可变对象 列表: 元组: 字典: 三大容器的遍历方法 2.怎么用数据 数字操作符: 判断循环: 3.函数 4. Python核心编程 4.1. 列表生成器 5 ...

  8. Redis详解(五)------ redis的五大数据类型实现原理

    前面两篇博客,第一篇介绍了五大数据类型的基本用法,第二篇介绍了Redis底层的六种数据结构.在Redis中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对 ...

  9. maven导入外部jar包的方法

    maven的导入外部jar包的方法(前提还有外部jar包) 1.问题: 在maven添加依赖包时,添加不成功,可以选择通过外部命令导入到仓库里. 2.命令:(在Dos命令行) mvn install: ...

  10. Python操作Excel 之 openpyxl

    一.基础 安装openpyxl 模块 pip install openpyxl 或者通过轮子安装 font(字体类):字号.字体颜色.下划线等 fill(填充类):颜色等 border(边框类):设置 ...