Hello!
I want to calculate the structure tensor of an image, so I need to store one 2-by-2 matrix for each pixel of the image, and I am wondering what is the best way to do this. Optimally, I would like to be able to do tensors(3,4)
to get a Mat(2,2)
object containing the tensor at position (3,4) in the image. I tried variants of
Mat_<Mat_<int> > tt(10, 10);
tt(0,3).create(2, 2);
But it fails with a segmentation fault when trying to create the 2-by-2 tensor
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7abf5b9 in cv::Mat::create(int, int const*, int) ()
from /usr/lib/libopencv_core.so.2.4
(gdb) bt
#0 0x00007ffff7abf5b9 in cv::Mat::create(int, int const*, int) ()
from /usr/lib/libopencv_core.so.2.4
#1 0x0000000000403576 in cv::Mat::create (this=0x654870, _rows=2, _cols=2,
_type=4) at /usr/include/opencv2/core/mat.hpp:353
#2 0x0000000000403937 in cv::Mat_<int>::create (this=0x654870, _rows=2,
_cols=2) at /usr/include/opencv2/core/mat.hpp:910
#3 0x0000000000402e7a in main (argc=5, argv=0x7fffffffe408)
at /home/burk/dev/image-restoration/sobel.cpp:100
I'm sure I'm just missing something trivial in one of the constructors, but I feel like I have tried everything!