鼠标左键,开始添加标签,右键结束标签。
函数工具
bool temp_6=false;
CvPoint point;
CvFont font;
char * dis_text=(char*)"|";
IplImage * img_c_6;
void delchar(char *s, char c)
{
int i, j, len;
len = strlen(s);
for (i = 0; i < len; i++) {
if (s[i] == c) {
for (j = i; j < len; j++)
s[j] = s[j + 1];
i = i - 1;
}
}
}
void my_mouse_callback_6(int event, int x, int y, int flags, void * para) {
IplImage *img = (IplImage *)para;
switch (event)
{
case CV_EVENT_LBUTTONDOWN:
temp_6 = true;
point = CvPoint(x, y);
break;
case CV_EVENT_RBUTTONDOWN:
temp_6 = false;
cvSetImageROI(img, CvRect(point.x, point.y - 50, 50, 100));
cvZero(img);
cvResetImageROI(img);
cvCopy(img, img_c_6);
delchar(dis_text, '|');
cvPutText(img, dis_text, point, &font, cvScalar(255));
dis_text =(char *)"|";
printf("标签结束\n");
break;
}
}
函数实现:
void opencv_4_3::ans_6() {
IplImage * img_6 = cvCreateImage(CvSize(534, 400), 8, 3);
cvZero(0);
cvNamedWindow("标签", CV_WINDOW_AUTOSIZE);
cvSetMouseCallback("标签",my_mouse_callback_6,img_6);
img_c_6 = cvCloneImage(img_6);
cvInitFont(&font, CV_FONT_HERSHEY_SCRIPT_COMPLEX, 1.5, 1.5, 1, 1);
while (true)
{
cvCopy(img_6, img_c_6);
if (temp_6) {
//puts(dis_text);
cvPutText(img_6, dis_text,point,& font, cvScalar(255));
}
cvShowImage("标签", img_c_6);
char c = cvWaitKey(15);
if (temp_6&&c > 32 && c < 126) {
char tempstr[2] = {c};
if (dis_text == "|") {
dis_text = (char *)malloc(sizeof(char) * 2);
strcpy(dis_text, tempstr);
}
else
strcat(dis_text, tempstr);
}
else if (c == 27)
break;
}
cvDestroyWindow("标签");
}