SLAM OpenCV的安装与使用
一.安装教程
- 环境依赖
sudo apt-get install build-essential
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
- opencv 3.4.10 下载以及contrib3.4.10付费部分下载
OpenCV主程序下载地址选择source版本(翻墙or镜像) Opencv_contrib的下载地址:,此处操作要注意版本一致: 点击Branch:master 点击Tags 选择3.4.10下载 注意这里git clone的地址,看好了后面有没有3.4.10的小尾巴!!!下载zip压缩包对的 - 整理OpenCV源码文件包
在/home/你的名字/ 文件夹下建一个opencv文件夹,并且将下载好的两个文件opencv-3.4.10和opencv_contrib3.4.10复制到 /home/你的名字/opencv 找到并打开opencv-3.4.10 文件夹 目录中的CMakeLists.txt文件,搜索OPENCV_ENABLE_NONFREE 变量,将后面OFF更改为ON,并保存,此步的作用是打开付费功能。因为在一些新版本上,SIFT、SURF被申请了专利,不能商用,所以需要打开付费功能才能调用这些申请过专利的程序。 在opencv-3.4.10 目录中建立build文件夹,并cd到该文件夹下,迎接后面的编译。 - 编译
mkdir build
cd build
cmake ..
make
- 安装
sudo make install
- 配置OpenCV环境变量及动态链接库
具体语句:
cd /etc/ld.so.conf.d
sudo touch opencv.conf
sudo gedit opencv.conf
在opencv.conf里面写入: case1:
/usr/local/lib
case2:
/usr/local/myopencv/lib
执行生效命令:
sudo ldconfig
二.操作OpenCV图像
这个我在终端没打开。 目前还不知道啥bug,后续学习中解决 尝试在KDevelop调试 配置参数
#include <iostream>
#include <chrono>
using namespace std;
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main(int argc, char **argv) {
cv::Mat image;
image = cv::imread(argv[1]);
if (image.data == nullptr) {
cerr << "文件" << argv[1] << "不存在." << endl;
return 0;
}
cout << "图像宽为" << image.cols << ",高为" << image.rows << ",通道数为" << image.channels() << endl;
cv::imshow("image", image);
cv::waitKey(0);
if (image.type() != CV_8UC1 && image.type() != CV_8UC3) {
cout << "请输入一张彩色图或灰度图." << endl;
return 0;
}
chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
for (size_t y = 0; y < image.rows; y++) {
unsigned char *row_ptr = image.ptr<unsigned char>(y);
for (size_t x = 0; x < image.cols; x++) {
unsigned char *data_ptr = &row_ptr[x * image.channels()];
for (int c = 0; c != image.channels(); c++) {
unsigned char data = data_ptr[c];
}
}
}
chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
chrono::duration<double> time_used = chrono::duration_cast < chrono::duration < double >> (t2 - t1);
cout << "遍历图像用时:" << time_used.count() << " 秒。" << endl;
cv::Mat image_another = image;
image_another(cv::Rect(0, 0, 100, 100)).setTo(0);
cv::imshow("image", image);
cv::waitKey(0);
cv::Mat image_clone = image.clone();
image_clone(cv::Rect(0, 0, 100, 100)).setTo(255);
cv::imshow("image", image);
cv::imshow("image_clone", image_clone);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
出来结果是这样!!! 我的二次元plmm还是没的出现 Killing me!!! 又是这种情况 你伤害了我,却一笑而过~~ Bye
|