c语言opencv读取图像,c++ OpenCV入门教程:图片读取和它的基本操作以及能获取的图片属性...

使用OpenCV时CMakeLists.txt怎么写

有些朋友使用cmake编译c++程序因此这里我介绍下使用opencv库的cmakelists.txt怎么写。如果你还不知道cmake那就忽略这一步(因为cmake就是命令行编译c++,你用的是IDE编译c++程序那就不用管cmakelists.txt了)。

#opencv 4.+需要c++11以上版本的编译器

set(CMAKE_CXX_FLAGS "-std=c++11")

# 引入Opencv包

find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})

# 注意use_opencv.cpp是我源代码文件名,你需要改成你源代码名

add_executable(use_opencv use_opencv.cpp)

# 链接OpenCV库

target_link_libraries(use_opencv ${OpenCV_LIBS})

读取图片

其实读取图片很简单,但是你得注意图片相对当前代码的路径。它就是读取得到一个矩阵。矩阵的元素是个数字。这个数字表示颜色。

#include

using namespace std;

#include

#include

int main(int argc, char** argv){

cv::Mat image;

image = cv::imread("./ubuntu.png");

if(image.data== nullptr)//nullptr是c++11新出现的空指针常量

{

cerr<

return 0;

}else

cout<

return 0;

}

图像矩阵的大小取决于我们所用的颜色模型,确切地说,取决于所用通道数。如果是灰度图像,矩阵就会像这样:

01bb174cf53643f281597feb2aeadc08.png

而对多通道图像来说,矩阵中的列会包含多个子列,其子列个数与通道数相等。例如,RGB颜色模型的矩阵:

698d32df57ad686244472119918af8ab.png

注意,子列的通道顺序是反过来的:BGR而不是RGB。

显示图片

#include

using namespace std;

#include

#include

int main(int argc, char** argv){

cv::Mat image;

image = cv::imread("./ubuntu.png");

if(image.data== nullptr)//nullptr是c++11新出现的空指针常量

{

cerr<

return 0;

}

cv::imshow("这里是窗口的名字",image);

cv::waitKey(0);// 按任意键在0秒后退出窗口,不写这句话是不会显示出窗口的

return 0;

}

输出图片的基本信息

#include

using namespace std;

#include

#include

int main(int argc, char** argv){

cv::Mat image;

image = cv::imread("./ubuntu.png");

if(image.data== nullptr)//nullptr是c++11新出现的空指针常量

{

cerr<

return 0;

}

//输出图片的基本信息

cout<

return 0;

}

按像素遍历图片

cv::Mat image;

image = cv::imread("./ubuntu.png");

if(image.data== nullptr)//nullptr是c++11新出现的空指针常量

{

cerr<

return 0;

}

// 遍历每个像素

//之所以用y这个名字表示行是因为图片的坐标系中行号就是y

for (size_t y = 0; y < image.rows; ++y) {

// 获取行指针,之所以用char的原因是因为颜色值是1-256用char能放得下

// ptr是pointer的缩写

unsigned char* row_ptr= image.ptr(y);

for (size_t x = 0; x < image.cols; ++x) {

//这是获得像素数据数组的头指针,注意像素数据可能会有多个通道所以才需要用数组存储

unsigned char* data_ptr = &row_ptr[x*image.channels()];

//对当前像素逐个通道输出颜色值

for (int i = 0; i < image.channels(); ++i) {

cout<< int(data_ptr[i]);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值