代码理解
1
|
using namespace cv; |
解释:加入此代码,后面就不需要在函数前加入cv:: 如从cv::imread(),可以直接写成imread()
1
2
3
4
|
int main( int argc, char ** argv) { return 0; } |
解释:
1
2
3
4
5
|
// argc是命令行,总的参数个数; argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数 // char *argv[] 用来取得你所输入的参数 // main(int argc, char **argv)和main(int argc, char *argv[])一个意思 // int argc是输入在命令行上的参数(字符串)个数; // *argv[]是指向字符串的指针数组,即数组元素是指向输入在命令行上的每个参数(字符串)的指针。 |
1
|
image = imread( "./1.jpg" ); |
解释:读取图片,其路径为相对路径,图片放在与.cpp相同路径下
1
2
|
imshow( "meinv" , image); waitKey(0); |
解释: 显示图片,加入waitKey(0)是防止图片出现之后马上自动消失。
1
2
3
4
|
for ( size_t y = 0; y < image.rows; y++) { return 0; } |
解释:size_t是一种数据相关的无符号类型,它被设计得足够大以便能够存储内存中对象的大小。
1
|
unsigned char * row_ptr = image.ptr<unsigned char >(y); |
解释:
1
2
|
获取行指针,之所以用char的原因是因为颜色值是1-256用char能放得下 ptr是pointer的缩写,是一个特殊的变量,它里面存储的数值被解释为内存里的一个地址。 |
全部代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; int main( int argc, char ** argv) { Mat image; image = imread( "./1.jpg" ); if (image.data == nullptr) //nullptr是c++11新出现的空指针常量 { cout << "图片文件不存在" << endl; } else //显示图片 imshow( "meinv" , image); waitKey(0); // 输出图片的基本信息 cout << "图像宽为:" << image.cols << "\t高度为:" << image.rows << "\t通道数为:" << image.channels() << endl; // 遍历每个像素 //之所以用y这个名字表示行 是因为图片的坐标系中行号就是y 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 i = 0; i < image.channels(); ++i) { cout << int (data_ptr[i])<<endl; } } system ( "pause" ); return 0; } |
读取结果
参考
https://www.w3cschool.cn/opencv/opencv-a4gp2cfi.html
到此这篇关于C++使用opencv读取图片的文章就介绍到这了,更多相关c++ opencv读取图片内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_44747572/article/details/124321690