我试图保存我在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);
}