mirror of
https://github.com/opencv/opencv.git
synced 2025-06-09 18:43:05 +08:00
Merge pull request #21103 from OrestChura:oc/fix_1D_Mat_RMat_View_issue
[G-API] Fix issue of getting 1D Mat out of RMat::View * Fix issue of getting 1D Mat out of RMat::View - added test - fixed for standalone too (removed Assert(dims.empty())) * Fixed asVeiw() function for standalone * Put more detailed comment
This commit is contained in:
parent
2deb38d615
commit
e20fe421e7
@ -24,8 +24,17 @@ namespace gimpl {
|
|||||||
|
|
||||||
inline cv::Mat asMat(RMat::View& v) {
|
inline cv::Mat asMat(RMat::View& v) {
|
||||||
#if !defined(GAPI_STANDALONE)
|
#if !defined(GAPI_STANDALONE)
|
||||||
return v.dims().empty() ? cv::Mat(v.rows(), v.cols(), v.type(), v.ptr(), v.step())
|
if (v.dims().empty()) {
|
||||||
: cv::Mat(v.dims(), v.type(), v.ptr(), v.steps().data());
|
return cv::Mat(v.rows(), v.cols(), v.type(), v.ptr(), v.step());
|
||||||
|
} else {
|
||||||
|
cv::Mat m(v.dims(), v.type(), v.ptr(), v.steps().data());
|
||||||
|
if (v.dims().size() == 1) {
|
||||||
|
// FIXME: cv::Mat() constructor will set m.dims to 2;
|
||||||
|
// To obtain 1D Mat, we have to set m.dims back to 1 manually
|
||||||
|
m.dims = 1;
|
||||||
|
}
|
||||||
|
return m;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
// FIXME: add a check that steps are default
|
// FIXME: add a check that steps are default
|
||||||
return v.dims().empty() ? cv::Mat(v.rows(), v.cols(), v.type(), v.ptr(), v.step())
|
return v.dims().empty() ? cv::Mat(v.rows(), v.cols(), v.type(), v.ptr(), v.step())
|
||||||
@ -41,7 +50,10 @@ namespace gimpl {
|
|||||||
}
|
}
|
||||||
return RMat::View(cv::descr_of(m), m.data, steps, std::move(cb));
|
return RMat::View(cv::descr_of(m), m.data, steps, std::move(cb));
|
||||||
#else
|
#else
|
||||||
return RMat::View(cv::descr_of(m), m.data, m.step, std::move(cb));
|
return m.dims.empty()
|
||||||
|
? RMat::View(cv::descr_of(m), m.data, m.step, std::move(cb))
|
||||||
|
// Own Mat doesn't support n-dimensional steps so default ones are used in this case
|
||||||
|
: RMat::View(cv::descr_of(m), m.data, RMat::View::stepsT{}, std::move(cb));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,4 +268,13 @@ TEST_F(RMatViewCallbackTest, MagazineInteraction) {
|
|||||||
mag.slot<View>().erase(rc);
|
mag.slot<View>().erase(rc);
|
||||||
EXPECT_EQ(1, callbackCalls);
|
EXPECT_EQ(1, callbackCalls);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(RMatView, Access1DMat) {
|
||||||
|
cv::Mat m({1}, CV_32FC1);
|
||||||
|
m.dims = 1;
|
||||||
|
auto rmat = cv::make_rmat<cv::gimpl::RMatOnMat>(m);
|
||||||
|
auto view = rmat.access(cv::RMat::Access::R);
|
||||||
|
auto out = cv::gimpl::asMat(view);
|
||||||
|
EXPECT_EQ(1, out.dims);
|
||||||
|
}
|
||||||
} // namespace opencv_test
|
} // namespace opencv_test
|
||||||
|
Loading…
Reference in New Issue
Block a user