鼠标左键,开始添加标签,右键结束标签。

函数工具

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("标签");
}

基于opencv添加标签。

相关文章: