C++ / OpenCVで行列積を計算したら、
cv::Mat a = b * c;
Image step is wrong
というエラーが出た。
OpenCV(3.4.5) C:\bin\opencv-3.4.5\sources\modules\core\include\opencv2/core/mat.inl.hpp:592: error: (-13:Image step is wrong) Step must be a multiple of esz1 in function 'cv::Mat::Mat'
原因は単純に、b.type()
とc.type()
が違っていた。b.type() == CV_32F
(float)、c.type() == CV_64F
(double)でした。
OpenCVで行列積を計算するにはfloatまたはdoubleどちらかに合わせる必要がある。
typeをfloatに合わせたらちゃんと計算できた
// bはもともとCV_32FC1
c.convertTo(c, CV_32FC1);
cv::Mat a = b * c;
わかりにくいエラーメッセージでした