多光谱图像
OpenCv Multispectral Image openCV
本文关键字:多光谱图像 更新时间:2023-10-16
我试图导入到openCV (c++)图像。tif有几个波段。使用命令imread,它只显示第一个波段。我怎么才能接触到其他人?
更重要的是,我试图访问文件与ifstream,但它看起来像我犯了一些错误!
谢谢你的帮助!
最好OpenCV目前不支持多页图像读取。它将只读取第一个图像。
对于c++ . tiff的读取,libtiff有一组很好的示例。Imagemagick也有c++支持。您可以读取图像并将数据缓冲区复制到OpenCV Mat中。
下面是一个使用imagemagick的magick++例程的c++示例代码:
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <string>
#include <Magick++.h>
#include <sstream>
#include <exception>
using namespace Magick;
using namespace std;
using namespace cv;
template < typename T > std::string to_string( const T& n )
{
std::ostringstream stm ;
stm << n ;
return stm.str() ;
}
vector <Mat> read_images( string filename, int num=1, string dpi="300" ) {
vector <Mat> ret;
Image image;
image.density(dpi);
int cols, rows;
int i = 0;
while( i < num ) {
cout << filename + "[" + to_string(i) + "]" << endl;
try {
image.read(filename + "[" + to_string(i) + "]");
}catch ( exception ex ) {
cout << "read " << i << " pages" << endl;
break;
}
i++;
cols = image.columns();
rows = image.rows();
char* blob = new char[cols*rows*3];
image.write(0,0, cols, rows, "RGB", MagickCore::CharPixel, blob);
ret.push_back(Mat(rows, cols, CV_8UC3, blob));
}
return ret;
}
int main ( int argc, char** argv ) {
vector<Mat> images = read_images(argv[1], 10);
for( int i = 0; i < images.size(); i++ ) {
imshow("image", images[i]);
waitKey();
}
}
这里有一些代码可以帮助查看哪里出错了。
但是,您似乎只访问了第一个频带,而不是您想要的所有频带。
试试这样做(这个例子有3个波段,因此是Vec3b):
Vec3b image = imread(filePath, CV_LOAD_IMAGE_UNCHANGED);
这将图像存储在3波段矢量中(有几种类型具有不同数量的波段,如Vec4b或Vec5b)。然后,就可以像访问vector中的元素一样访问每个带:
image[0]
image[1]
image[2]
如果我的假设是正确的,您正在尝试通过使用
一行的内容来访问。int bandValue = (int)image;
或类似的东西。请记住,引用vector(或数组)的名称与访问该vector(或数组)中的第一个元素是一样的
image = image[0]
相关文章:
- 使用 Splashkit 逐个显示多个C++图像
- 在opencv c++目录中从/加载/保存多个图像
- Tesseract/Lebonica处理单页和多页图像的正确方法
- 在 Qt 中显示多个图像缩略图
- 存储将单个查询图像与多个图像的列表匹配的关键点索引
- 如何将多个图像存储到多个矩阵中
- 如何使用任何编程语言组合序列中的多个图像
- 如何在移动滑块时串联加载和显示多个图像?
- 使用 CUDA 迭代多个图像会提高性能吗?
- 如何使用qfiledialog和提升来保存多个图像
- 如何优化多个图像缝合
- 如何使用终端命令从C++程序打开多个图像
- C++ SFML 显示多个图像
- 如何使用SFML鼠标移动分别移动多个图像
- 多模图像对齐问题
- C++ 多个图像上的 OpenCV 线性代数?
- 在 opencv 中从 Mat 图像创建多个子图像?尝试为每个连接的组件创建子图像
- C - 将多个图像放在数组指针中
- 将多个图像从QT应用程序拖到MS Word
- 多光谱图像