我正在尝试保存我在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位的问题。我感谢你的帮助。
答案 0 :(得分:0)
我的水晶球告诉我,你正试图获得4点的nessecary进行透视变换;)。
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));
...
}
答案 1 :(得分:0)
你能试试吗?
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);
}