- 环境依赖
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#include using namespace std; #include #include int main(int argc, char **argv) { // 读取argv[1]指定的图像 cv::Mat image; image = cv::imread(argv[1]); //cv::imread函数读取指定路径下的图像 // 判断图像文件是否正确读取 if (image.data == nullptr) { //数据不存在,可能是文件不存在 cerr << "文件" << argv[1] << "不存在." << endl; return 0; } // 文件顺利读取, 首先输出一些基本信息 cout << "图像宽为" << image.cols << ",高为" << image.rows << ",通道数为" << image.channels() << endl; cv::imshow("image", image); // 用cv::imshow显示图像 cv::waitKey(0); // 暂停程序,等待一个按键输入 // 判断image的类型 if (image.type() != CV_8UC1 && image.type() != CV_8UC3) { // 图像类型不符合要求 cout << "请输入一张彩色图或灰度图." << endl; return 0; } // 遍历图像, 请注意以下遍历方式亦可使用于随机像素访问 // 使用 std::chrono 来给算法计时 chrono::steady_clock::time_point t1 = chrono::steady_clock::now(); for (size_t y = 0; y < image.rows; y++) { // 用cv::Mat::ptr获得图像的行指针 unsigned char *row_ptr = image.ptr (y); // row_ptr是第y行的头指针 for (size_t x = 0; x < image.cols; x++) { // 访问位于 x,y 处的像素 unsigned char *data_ptr = &row_ptr[x * image.channels()]; // data_ptr 指向待访问的像素数据 // 输出该像素的每个通道,如果是灰度图就只有一个通道 for (int c = 0; c != image.channels(); c++) { unsigned char data = data_ptr[c]; // data为I(x,y)第c个通道的值 } } } chrono::steady_clock::time_point t2 = chrono::steady_clock::now(); chrono::duration time_used = chrono::duration_cast < chrono::duration < double >> (t2 - t1); cout << "遍历图像用时:" << time_used.count() << " 秒。" << endl; // 关于 cv::Mat 的拷贝 // 直接赋值并不会拷贝数据 cv::Mat image_another = image; // 修改 image_another 会导致 image 发生变化 image_another(cv::Rect(0, 0, 100, 100)).setTo(0); // 将左上角100*100的块置零 cv::imshow("image", image); cv::waitKey(0); // 使用clone函数来拷贝数据 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); // 对于图像还有很多基本的操作,如剪切,旋转,缩放等,限于篇幅就不一一介绍了,请参看OpenCV官方文档查询每个函数的调用方法. cv::destroyAllWindows(); return 0; }
出来结果是这样!!!
我的二次元plmm还是没的出现
Killing me!!! 又是这种情况
你伤害了我,却一笑而过~~
Bye



