480 x 640 x 32
을 따르는 cv::Mat
이 있습니다.cv :: Mat에서 데이터에 액세스하는 방법
이 구조 내에서 데이터에 액세스하려면 어떻게해야합니까? 위치 [2, 2, 2]
에서 요소에 액세스하려고한다고 가정 해 보겠습니다. 어떻게해야합니까?
편집 1 :이 template<typename T> const T& Mat::at(int i, int j, int k) const
를 사용하여 시도했지만 나는 다음과 같은 런타임 오류가 나타납니다
:
편집 2 : 여기
은 내가 얼마나입니다 코드 사용 :
cv::Mat f(382,510,32);
f=Utils::toMat(features);
cout<<f.at<double>(1,1,1);
여기에서 toMat
은 다음과 같습니다.
cv::Mat Utils::toMat(mxArray* p_)
{
mwSize ndims_= mxGetNumberOfDimensions(p_);
const mwSize* dims=mxGetDimensions(p_);
std::vector<int> d(dims, dims+ndims_);
int ndims = (d.size()>2) ? d.size()-1 : d.size();
int nchannels = (d.size()>2) ? *(d.end()-1) : 1;
int depth=CV_64F;
std::swap(d[0], d[1]);
cv::Mat mat(ndims, &d[0], CV_MAKETYPE(depth, nchannels));
// Copy each channel.
std::vector<cv::Mat> channels(nchannels);
std::vector<mwSize> si(d.size(), 0); // subscript index
int type = CV_MAKETYPE(depth, 1); // Source type
for (int i = 0; i<nchannels; ++i)
{
si[d.size()-1] = i;
void *pd = reinterpret_cast<void*>(
reinterpret_cast<size_t>(mxGetData(p_))+
mxGetElementSize(p_)*mxCalcSingleSubscript(p_, si.size(), &si[0]));
cv::Mat m(ndims, &d[0], type, pd);
// Read from mxArray through m
m.convertTo(channels[i], CV_MAKETYPE(depth, 1));
}
cv::merge(channels, mat);
return mat;
}
왜 매트를 정의/작성 했습니까? 'at' 함수를 호출하는 방법은 그것으로부터 크게 좌우됩니다. 또한,'at' 함수를 호출하는 코드를 게시하십시오. – Antonio
cv :: Mat f (382,510,32); f = Utils :: toMat (기능); cout < (1,1,1); 기본적으로 toMat는 mxArray를 cv :: mat 구조체로 변환합니다. –
Simon
이 'Utils :: toMat'에 대해 더 많이 알 수 있습니까? 코드를 게시 할 수 있다면 더 좋습니다. 문제는 거기에 100 % 위치합니다. – Antonio