typedef struct params {
cv::Point loc1[MAX_OBJECTS];
cv::Point loc2[MAX_OBJECTS];
cv::Mat objects[MAX_OBJECTS];
char* win_name;
cv::Mat orig_img;
cv::Mat cur_img;
int n;
cv::Point loc1[MAX_OBJECTS];
cv::Point loc2[MAX_OBJECTS];
cv::Mat objects[MAX_OBJECTS];
char* win_name;
cv::Mat orig_img;
cv::Mat cur_img;
int n;
} params;
如果
params p;
p.n=0;
cvSetMouseCallback( win_name, &mouse, &p );
则
void mouse( int event, int x, int y, int flags, void* param )
{
params* p = (params*)param;//在这里发现p.n的值变为1了,搞不懂为什么
}
改正措施。
在结构体参数时,一定要用指针结构对象。
如果用普通结构体对象,对其去地址传递的话,可能会出问题。。具体原因有待于分析。。。做个笔记,防止忘记了
params *p=new params;
p->n=0;
cvSetMouseCallback( win_name, &mouse, p );
void mouse( int event, int x, int y, int flags, void* param )
{
params* p = (params*)param;//这样改就不会出错了
}