在openCV中访问mat中的元素时获取垃圾值

getting garbage values while accessing elements in mat in openCV

本文关键字:获取 openCV 访问 mat 元素      更新时间:2023-10-16

Hi我有一个声明为rgbMat的矩阵,我正试图通过以下代码旋转它:

    CvMat* rot = cvCreateMat(2,3,CV_32FC1);
    CvPoint2D32f center = cvPoint2D32f(rgbMat->width/2,rgbMat->height/2); 
    double angle = 90;
    double scale = 1;
    CvMat* rot3= cv2DRotationMatrix( center, angle, scale, rot);

不幸的是,我只得到6个值作为输出,而我期望得到25个值,因为我最初的rgbMat是5*5矩阵,如下所示:

       {
        { 1, 1, 1, 1, 1} ,
        { 0, 0, 0, 0, 0} ,
        { 2, 2, 2, 2, 2} ,
        { 0, 0, 0, 0, 0} ,
        { 1, 1, 1, 1, 1}  } 

有人能告诉我为什么吗?

首先,坚持使用C API(CvMat*,cvFoo)或C++API(Mat,Foo)。清除后,您确实得到了一个正确的旋转矩阵,现在您必须使用cvWarpAffine或WarpAffine应用它

您只输出了6个值,因为您正在迭代并打印旋转矩阵的值,而不是rgbMat中的值。执行此操作的代码实际上是正确的,并且您正在获得您应该得到的输出。

除了Boyko Perfanov的建议(我建议您遵循)之外,您还可以使用cvTranspose(),它将使rgbMat旋转90度,这正是您正在尝试做的。这是可能的,因为rgbMat在两个维度上都是对称的。这种方法消除了显式迭代CvMat的每个元素的需要。

cvTranspose(rgbMat, rgbMat);