如何访问Vector的行和列<;Mat>;Android开放式cv上的图像?

如何访问Vector的行和列<;Mat>;Android开放式cv上的图像?,android,opencv,vector,rows,mat,Android,Opencv,Vector,Rows,Mat,我正在使用Android浏览OpenCV上的一些代码。有谁能告诉我如何访问矢量图的行和列吗?它的声明和列和行的访问方式如下所示,但我遇到了像和这样的错误 vector<Mat> images;//Vector of Mat image declared ... int im_width = images[0].cols;//its trying to access column of images matrix int im_height = images[0].rows;//try

我正在使用Android浏览OpenCV上的一些代码。有谁能告诉我如何访问矢量图的行和列吗?它的声明和列和行的访问方式如下所示,但我遇到了像和这样的错误

vector<Mat> images;//Vector of Mat image declared
...
int im_width = images[0].cols;//its trying to access column of images matrix
int im_height = images[0].rows;//trying to access rows of Mat images
矢量图像//Mat图像的向量
...
int im_width=images[0].cols//它试图访问图像矩阵的列
int im_height=图像[0]。行//正在尝试访问Mat图像的行
如果这不是访问向量图像的列和行的正确方法,那么它是什么?
当它说images[0]时,它试图访问Mat图像向量的索引0。我不确定这是否正确。

Mat
已经是图像向量。因此,不需要将其定义为向量 使用此
images.cols
只能获得列数或行数。如果要访问特定列和行中的数据,应按如下操作:

int mat_value = image.get(i, j)[0];
其中i和j是列和行的索引

编辑: 或者,您可以查看图像的列和行的编号方式

int cols = image.size().width;
int rows = image.size().height;
另外,我认为OpenCV文档对其进行了很好的解释

Mat m;
m.row(i);
m.col(i);
参考:

编辑:以下工作并产生预期输出。也许你应该描述一下你的错误

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
    vector<Mat> vectors;
    Mat img1 = imread( "C:/test/1.jpg");
    Mat img2 = imread( "C:/test/2.jpg");
    vectors.push_back(img1);
    vectors.push_back(img2);
    cout<<vectors[0].rows<<endl;
    cout<<vectors[0].cols<<endl;
    cin.ignore(1);
    return 0;
}    
#包括“opencv2/imgproc/imgproc.hpp”
#包括“opencv2/highgui/highgui.hpp”
#包括
使用名称空间cv;
使用名称空间std;
int main(int argc,字符**argv)
{
向量;
Mat img1=imread(“C:/test/1.jpg”);
Mat img2=imread(“C:/test/2.jpg”);
向量。推回(img1);
向量。推回(img2);

cout成员
告诉您矩阵的行数和列数。要访问它们,您可以使用
at

//假设您的图像是CV_8U,因此可以使用无符号字符访问它
cv::Mat m=。。。;
对于(int r=0;r
您还可以在
处保存对
的一些调用,并通过指针访问每一行的数据:

//假设您的图像是CV_8U,因此可以使用无符号字符访问它
cv::Mat m=。。。;
对于(int r=0;r
如果矩阵在内存中是连续的,则只需获取一次指针:

//假设您的图像是CV_8U,因此可以使用无符号字符访问它
cv::Mat m=。。。;
断言(m.isContinuous());
常量无符号字符*p=m.ptr();
对于(int r=0;r
以上所有建议都没有帮助,因此我决定创建一个具有Mat数据类型的temp变量,并将向量的第0个索引复制到Mat temp,并以temp.cols和temp.rows访问temp的行和列。感谢您尝试帮助我。

由于Mat已经是图像的向量,您无需再次定义向量。你需要做的就是

Mat images;
for(int j =0; j <images.rows; j++)
{
  for(int k =0; k <images.cols; k++)
  {
    cout << image.at<type>(j,k)<< endl;
  }
}
Mat图像;

对于(int j=0;j),我知道我可以访问matrix.cols和matrix.rows作为matrix的行和列。我想知道的是,当Mat-theMatrix变成Vector-theMatrix时会发生什么,我如何访问matrix[0]的行和列。
at()
扫描图像时速度非常慢。如果图像不连续,可以将
uchar*p=m.ptr(r)
在内部循环开始之前进入外部循环。@Sisay我不同意你的观点。你到底想做什么?你是在暗示cv::Mat和Vector是相同的声明。'Course cv::Mat和Vector不相同。但是Matrix[0]只是一个Mat,所以如果您知道如何处理Mat,问题是什么。我不是试图访问Cv::Mat的行和列。我是试图访问保存在向量的第0个索引(即向量图像)处的Mat的行和列。这就是方法(legit)我正在尝试这样做,但我不知道为什么,但这向我显示了一个错误,它没有识别列和行。P.S我正在Android上使用OpenCV作为本机代码(JNI)。a
Mat
不是
vector
cv::Mat
没有成员
get()
。而不是
int cols=image.size()宽度>代码>你可以写“代码>图像.COLS。请你仔细阅读问题和答案吗?问题有一个安卓标签而不是C。这个词的意思是:VistoOVICH。代码中的代码实际上是C++的JNI代码,不是java。我想是这样。没有显示与行和CARS相关的错误。我有一个与M有关的错误。inSDKVersion(非常确定这与前面的错误无关),我现在正在处理这个问题。