学习目标:学习使用c++对图片进行读取等操作。
代码理解
using namespace cv;
解释:加入此代码,后面就不需要在函数前加入cv:: 如从cv::imread(),可以直接写成imread()
int main(int argc, char** argv)
{
return 0;
}
解释:
image = imread("./1.jpg");
解释:读取图片,其路径为相对路径,图片放在与.cpp相同路径下
imshow("meinv", image);
waitKey(0);
解释: 显示图片,加入waitKey(0)是防止图片出现之后马上自动消失。
for (size_t y = 0; y < image.rows; y++)
{
return 0;
}
解释:size_t是一种数据相关的无符号类型,它被设计得足够大以便能够存储内存中对象的大小。
unsigned char* row_ptr = image.ptr<unsigned char>(y);
解释:
获取行指针,之所以用char的原因是因为颜色值是1-256用char能放得下
ptr是pointer的缩写,是一个特殊的变量,它里面存储的数值被解释为内存里的一个地址。
全部代码
#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)
{
cout << "图片文件不存在" << endl;
}
else
{
imshow("meinv", image);
waitKey(0);
}
cout << "图像宽为:" << image.cols << "\t高度为:" << image.rows << "\t通道数为:" << image.channels() << endl;
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
|