我想导入到openCV(C++)的一个图像。 使用命令imread它只显示第一个乐队。我怎样才能访问其他人?OpenCv多光谱图像openCV
更多我试图用ifstream访问该文件,但它看起来像我犯了一些错误!
感谢您的帮助!
最好
我想导入到openCV(C++)的一个图像。 使用命令imread它只显示第一个乐队。我怎样才能访问其他人?OpenCv多光谱图像openCV
更多我试图用ifstream访问该文件,但它看起来像我犯了一些错误!
感谢您的帮助!
最好
有些代码在这里会有帮助,看看出了什么问题。
但是,您似乎只访问第一个乐队,而不是您想要的所有乐队。
尝试是这样的(该实施例具有3个条带,从而Vec3b):
Vec3b image = imread(filePath, CV_LOAD_IMAGE_UNCHANGED);
这在3波段矢量存储图像(有几种类型的具有不同量的频带,像Vec4b或Vec5b)。然后,您可以访问每个乐队就像一个向量访问的元素:
image[0]
image[1]
image[2]
如果有什么我假设是正确的,你用的东西沿着
int bandValue = (int)image;
或行试图访问相似的东西。请记住,参照向量(或阵列)的名称是相同的在载体(或阵列)存取第一元件
image = image[0]
嘿,如果有一个庞大的乐队(比如说1000),有什么像VecNb? – CharybdeBE
的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();
}
}
http://answers.opencv.org/question/23616/stack-of-images-tif-with-c-opencv/ – macroland
看起来像是不可能在第一个之后加载图像。 –