学习用C++读取图片
1、 下载codeblock编译器,用于运行C++
2、 C++读取图片文件
// read a file into memory
#include // std::cout
#include // std::ifstream
using namespace std;
int main () {
// 1.Open picture file
std::ifstream is ("C:\\Users\\admin\\Desktop\\test\\1.jpg", std::ifstream::binary);
if (is) {
// 2.get length of file:
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
// 3.Create buffer
char * buffer = new char [length];
std::cout << "Reading " << length << " bits... \n";
// 4.read data as a block:
is.read (buffer,length);
if (is)
std::cout << "picture read successfully.";
else
std::cout << "error: only " << is.gcount() << " could be read";
is.close();
// ...buffer contains the entire file...
delete[] buffer;
}
return 0;
}
FILE *in;
FILE操作是C语言常用的一种读取数据的一种方法;
FILE是在stdio.h中定义的结构体类型,封装了与文件有关的信息,如文件句柄、位置指针及缓冲区等,缓冲文件系统为每个被使用的文件在内存中开辟一个缓冲区,
用来存放文件的有关信息,这些信息被保存在一个FILE结构类型的变量中,in是一个指向FILE结构体类型的指针变量。
#include
#include
using namespace std;
int main(){
FILE *in;
// 1. 打开图片文件
in = fopen("C:\\Users\\admin\\Desktop\\test\\1.jpg", "rb");
if(in){
// 2. 计算图片长度
fseek(in, 0L, SEEK_END);
int length = ftell(in);
fseek(in, 0L, SEEK_SET);
// 3. 创建内存缓存区
char * buffer = new char[length];
// 4. 读取图片
fread(buffer, sizeof(char), length, in);
if (in)
std::cout << "picture read successfully.";
fclose(in);
// 到此,图片已经成功的被读取到内存(buffer)中
delete [] buffer;
}
return 0;
}
3、 用opencv读取图片
方法一:自己用Cmake编译opencv
安装教程:https://blog.csdn.net/wj_shi/article/details/99670132
安装参考博客:
https://blog.csdn.net/goomaple/article/details/45642499
https://blog.csdn.net/qq_41748900/article/details/86765420
cmake安装地址:cmake-3.10.3-win64-x64.zip
opencv安装地址:opencv-3.4.0-vc14_vc15
mingw安装地址:mingw-w64-v8.0.0
方法二:找到编译好的opencv文件;
最开始准备自己用Cmake编译opencv从而得到MinGW下使用的相关库文件,一直出错,最终找到该博主的方法(https://www.jianshu.com/p/c16b7c870356),用已经编译好的opencv文件,只需要解压,将环境变量配置好即可。
测试代码:
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main()
{
cout << "Hello world!" << endl;
Mat img = imread("C:\\Users\\admin\\Desktop\\test\\1.jpg");
imshow("test", img);
cvtColor(img, img, CV_RGB2GRAY);
imshow("gray", img);
waitKey(0);
return 0;
}
测试结果:
如果使用python,可以直接加载opencv库,即可调用opencv中的方法。
文件流读取:http://www.cplusplus.com/reference/istream/istream/read/
文件操作(FILE)与常用文件操作函数:https://www.cnblogs.com/lanhaicode/p/10320097.html