云南省建设考试中心网站,成都网站建设价格,2008 iis7添加网站,厦门建设工程交易中心网站随手笔记——OpenCV 的基础使用方法 说明CMakeLists.txt关键内容源代码 说明
演示了如下几个操作#xff1a;图像读取、显示、像素遍历、复制、赋值等。大部分的注解已写在代码里面。编译该程序时#xff0c;需要在 CMakeLists.txt 中添加 OpenCV 的头文件#xff0c;然后把… 随手笔记——OpenCV 的基础使用方法 说明CMakeLists.txt关键内容源代码 说明
演示了如下几个操作图像读取、显示、像素遍历、复制、赋值等。大部分的注解已写在代码里面。编译该程序时需要在 CMakeLists.txt 中添加 OpenCV 的头文件然后把程序链接到库文件上。同时由于使用了 C 11 标准如 nullptr 和 chrono还需要设置一下编译器。
CMakeLists.txt关键内容
cmake_minimum_required(VERSION 2.8)set(CMAKE_BUILD_TYPE Release)
# 添加c 11标准支持
set(CMAKE_CXX_FLAGS -stdc11 -O2)# Eigen
include_directories(/usr/include/eigen3)# 寻找OpenCV库
find_package(OpenCV REQUIRED)
# 添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})add_subdirectory(imageBasics)源代码
#include iostream
#include chronousing namespace std;#include opencv2/core/core.hpp
#include opencv2/highgui/highgui.hppint 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.ptrunsigned char(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::durationdouble 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;
}