鼠标回调函数中void*转换为int*** (opencvc++)



我试图保存我在4x2矩阵中单击图像的4个点的坐标。要做到这一点,我使用以下代码:

static void mouseEvent(int evt, int x, int y, int flags, void* param)
{
    int*** p=(int***)param;

    p*=new int*[4];
    (*p)[0]=new int[2];
    (*p)[1]=new int[2];
    (*p)[2]=new int[2];
    (*p)[3]=new int[2];
    int i=0;
    if (evt == CV_EVENT_LBUTTONDOWN && i<4){
        (*p)[i][0]=x;
        (*p)[i][1]=y;
        i++;
    }
}
int main()
{
    ....
    int** p;
    namedWindow("rgb image", CV_WINDOW_AUTOSIZE);
    imshow( "rgb image", bgrImage );
    setMouseCallback("rgb image", mouseEvent, &p);
    ...
}

我在调试过程中看到的问题是"int*** p=(int***)param;"这行不起作用。我检查了几个来源,认为这可能是64位的问题。谢谢你的帮助。

我的水晶球告诉我,你正试图获得透视转换所需的4个点;)。

static void mouseEvent(int evt, int x, int y, int flags, void* param)
{
    vector<Point2f> *p = (vector<Point2f>*)param;
    if (evt == CV_EVENT_LBUTTONDOWN && p->size()<4){
        p->push_back(Point2f(x,y);
    }
}
int main()
{
    ....
    vector<Point2f> p;
    namedWindow("rgb image", CV_WINDOW_AUTOSIZE);
    imshow( "rgb image", bgrImage );
    setMouseCallback("rgb image", mouseEvent, (void*)(&p));
    ...
}

你能试试吗?

int nth_count=0;
static void mouseEvent(int evt, int x, int y, int flags, void* param)
{
    int*** address_of_p=(int***)param;
    (*p)[nth_count]=new int[2];
    if (evt == CV_EVENT_LBUTTONDOWN && nth_count<4){
        (*p)[nth_count][0]=x;
        (*p)[nth_count][1]=y;
        nth_count++;
    }
}
int main()
{
    int** p;
    p = new int*[4];
    namedWindow("rgb image", CV_WINDOW_AUTOSIZE);
    imshow( "rgb image", bgrImage );
    setMouseCallback("rgb image", mouseEvent, &p);
}

相关内容

  • 没有找到相关文章

最新更新