4.3.3 OpenCV 实现 高斯金字塔和拉普拉斯金字塔
4.3.3 OpenCV 实现 高斯金字塔和拉普拉斯金字塔
参考教程:
图像处理中的高斯金字塔和拉普拉斯金字塔_拉普拉斯金字塔插入偶数行,偶数列也是用卷积算法吗-CSDN博客
1. 安装OpenCV
1.1 下载OpenCV
参考教程:
无法定位软件包libjasper-dev的解决办法-CSDN博客
视觉slam14讲ch5 opencv安装 ubuntu20.04_libvtk5-dev-CSDN博客
OpenCV提供了大量的开源图像算法,是计算机视觉领域使用极广的图像处理算法库。在Ubuntu系统下,OpenCV有从源代码安装和只安装库文件两种方式可以选择:
(1)从源代码安装,是指从OpenCV网站下载所有的OpenCV源代码,并在机器上编译以便使用。好处是可以选择的版本比较丰富,而且也能看到源代码,不过需要花费一些编译时间。
(2)只安装库文件,是指通过Ubuntu安装由Ubuntu社区人员已经编译好的库文件,无须重新编译一遍。
因为我们使用较新版本的OpenCV,所以必须选择从源代码安装的方式来安装它。一来,可以调整一些编译选项,匹配编程环境(例如,需不需要GPU加速等);再者,可以使用一些额外的功能。OpenCV目前维护三个主要版本,分为OpenCV2.4系列、OpenCV 3系列和OpenCV 4系列。当前使用OpenCV 3系列。
从如下网站中下载源代码:
页面下滑,选择OpenCV – 3.4.16
版本,点击”Sources
“进行下载
下载得到如下的压缩包
将opencv-3.4.16.zip
文件拖拽至虚拟机的home
文件夹下:
点击opencv-3.4.16.zip
文件,右键,选择“提取到此处
”
1.2 配置依赖项并编译
编译之前,先来安装OpenCV
的依赖项:
rosnoetic@rosnoetic-VirtualBox:~$ sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt update
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt upgrade
rosnoetic@rosnoetic-VirtualBox:~$ sudo apt-get install build-essential libgtk2.0-dev libvtk6-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev libtbb-dev libcanberra-gtk-module
事实上,OpenCV的依赖项很多,缺少某些编译项会影响它的部分功能。OpenCV在cmake阶段检查依赖项是否会安装,并调整自己的功能。如果电脑上有GPU并且安装了相关依赖项,OpenCV也会把GPU加速打开。不过当前,上述依赖项已经足够了。
安装完依赖项后进行编译:
rosnoetic@rosnoetic-VirtualBox:~$ cd opencv-3.4.16/
rosnoetic@rosnoetic-VirtualBox:~/opencv-3.4.16$ mkdir build
rosnoetic@rosnoetic-VirtualBox:~/opencv-3.4.16$ cd build/
rosnoetic@rosnoetic-VirtualBox:~/opencv-3.4.16/build$ cmake ..
接着进行编译
rosnoetic@rosnoetic-VirtualBox:~/opencv-3.4.16/build$ make -j4
整个编译过程大概需要二十分钟到一小时不等。
make之后,调用sudo make install
将OpenCV
安装到电脑上。
rosnoetic@rosnoetic-VirtualBox:~/opencv-3.4.16/build$ sudo make install
2. 操作OpenCV图像
2.1 编写use_resize函数
2.1.1 创建文件夹
通过终端创建一个名为use_resize
的文件夹以保存我们的VSCode
项目,在/use_resize
目录下打开vscode
。
rosnoetic@rosnoetic-VirtualBox:~$ mkdir -p use_resize
rosnoetic@rosnoetic-VirtualBox:~$ cd use_resize/
rosnoetic@rosnoetic-VirtualBox:~/use_resize$ code .
2.1.2 编写源代码
新建文件use_resize.cpp
在use_resize.cpp
粘贴如下代码并保存(Ctrl+S)
// 导入opencv库
#include <opencv2/opencv.hpp>
// 导入imgproc库,该库可以进行图像的相关处理,包括滤波,直方图处理以及边缘检测等
#include <opencv2/imgproc/imgproc.hpp>
// 导入opencv的核心库,用于处理数据类型以及数组矩阵等操作
#include <opencv2/core/core.hpp>
// 导入string头文件,用于记录图片路径地址
#include <string>
// 使用命名空间,这是因为string实际上是在std命名空间下的
using namespace std;
// 定义图片路径,并使用string
string image_path = "./ubuntu.png";
int main(int argc, char * argv){
// 使用cv::imread读取灰度图像,并使用Mat进行接收
cv::Mat image = cv::imread(image_path, 0);
// 读取原始图像的尺寸
int rows = image.rows, cols = image.cols;
// 使用cv::Mat创建目标图像矩阵,small_img表示缩小的图片,big_img表示放大的图片
cv::Mat small_img, big_img;
// 使用cv::Size函数设置图像尺寸,需要首先将rows转化为浮点数类型,避免整型数据运算直接剔除小数部分
cv::Size small_size(cvRound((float)rows/2), cvRound((float)cols/2));
cv::Size big_size(cvRound((float)rows*2),cvRound((float)cols*2));
// 使用resize函数进行图片的转换
cv::resize(
image, // 原始图像
small_img, // 缩小后的图像
small_size, // 缩小的尺寸
0, // 水平方向上的缩小系数,取0表示自动计算
0, // 垂直方向上的缩小系数,取0表示自动计算
cv::INTER_LINEAR // 使用线性插值的方式
);
cv::resize(
image, // 原始图像
big_img, // 放大后的图像
big_size, // 放大尺寸
0, // 水平方向上的放大系数,取0表示自动计算
0, //垂直方向上的放大系数
cv::INTER_LINEAR
);
// 展示图像
// 展示原始图像
cv::imshow("原始图像",image);
// 展示放大后的图像
cv::imshow("放大后的图像",big_img);
// 展示缩小后的图像
cv::imshow("缩小后的图像", small_img);
// 等待在窗口回车后,再关闭图像
cv::waitKey();
return 0;
}
2.2 新建CMakeLists.txt文件
新建CMakeLists.txt
文件
在CMakeLists.txt
中添加如下内容:
# cmake需要指定使用的版本,当前使用2.8版本
cmake_minimum_required(VERSION 2.8)
# 为项目命名一个名称
project(USE_RESIZE)
# 设置C++的版本,当前设置为C++11的版本,变量CMAKE_CXX_FLAGS是一个变量名称,不需要双引号
set(CMAKE_CXX_FLAGS, "-std=c++11")
# 我们的程序中使用了opencv库,因此我们首先需要找到opencv
find_package(OpenCV REQUIRED)
# 将opencv的目录OPENCV_INCLUDE_DIRS添加到当前的头文件目录中
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加可执行文件,并将该可执行文件命名
add_executable(use_resize use_resize.cpp)
# 将可执行文件和OpenCV的库文件进行连接,可执行文件需要和可执行文件进行连接
target_link_libraries(use_resize ${OpenCV_LIBS})
由于程序中使用了C++11
标准(如nullptr
和chrono
),因此需要设置编译器set(CMAKE_CXX_FLAGS "-std=c++11")
。
2.3 cmake编译
ctrl+alt+T
打开终端,执行如下指令进行cmake
编译
rosnoetic@rosnoetic-VirtualBox:~$ cd use_resize/
rosnoetic@rosnoetic-VirtualBox:~/use_resize$ mkdir build
rosnoetic@rosnoetic-VirtualBox:~/use_resize$ cd build/
rosnoetic@rosnoetic-VirtualBox:~/use_resize/build$ cmake ..
接着make
对工程进行编译
rosnoetic@rosnoetic-VirtualBox:~/use_resize/build$ make
2.4 运行
将ubuntu.png
文件拖拽至use_resize/build
文件夹下
进一步的调用可执行文件:
rosnoetic@rosnoetic-VirtualBox:~/use_resize/build$ ./use_resize
依次显示如下内容:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)