core: add missing implementation for Mat::ptr(Vec)
authorberak <px1704@web.de>
Sun, 9 May 2021 12:01:54 +0000 (14:01 +0200)
committerberak <px1704@web.de>
Sun, 9 May 2021 12:15:12 +0000 (14:15 +0200)
modules/core/include/opencv2/core/mat.inl.hpp
modules/core/test/test_mat.cpp

index 49357555dedc0fd055991c60146aa87a7cd5ce99..fffb860f184638bf5459f633e6a439363bdfd23b 100644 (file)
@@ -898,6 +898,33 @@ const _Tp* Mat::ptr(const int* idx) const
     return (const _Tp*)p;
 }
 
+template<int n> inline
+uchar* Mat::ptr(const Vec<int, n>& idx)
+{
+    return Mat::ptr(idx.val);
+}
+
+template<int n> inline
+const uchar* Mat::ptr(const Vec<int, n>& idx) const
+{
+    return Mat::ptr(idx.val);
+}
+
+template<typename _Tp, int n> inline
+_Tp* Mat::ptr(const Vec<int, n>& idx)
+{
+    CV_DbgAssert( elemSize() == sizeof(_Tp) );
+    return Mat::ptr<_Tp>(idx.val);
+}
+
+template<typename _Tp, int n> inline
+const _Tp* Mat::ptr(const Vec<int, n>& idx) const
+{
+    CV_DbgAssert( elemSize() == sizeof(_Tp) );
+    return Mat::ptr<_Tp>(idx.val);
+}
+
+
 template<typename _Tp> inline
 _Tp& Mat::at(int i0, int i1)
 {
index 2afd926bd15b82c8370e329e479a2a523a79afa2..4f7cbb67258fd0f78de82b733ec4c26f58a946d9 100644 (file)
@@ -2365,4 +2365,20 @@ TEST(Mat, regression_18473)
 }
 
 
+TEST(Mat, ptrVecni_20044)
+{
+    Mat_<int> m(3,4); m << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;
+    Vec2i idx(1,1);
+
+    uchar *u = m.ptr(idx);
+    EXPECT_EQ(int(6), *(int*)(u));
+    const uchar *cu = m.ptr(idx);
+    EXPECT_EQ(int(6), *(int*)(cu));
+
+    int *i = m.ptr<int>(idx);
+    EXPECT_EQ(int(6), *(i));
+    const int *ci = m.ptr<int>(idx);
+    EXPECT_EQ(int(6), *(ci));
+}
+
 }} // namespace