《学习OpenCV》第四章第6题

xiaoxiao2021-02-28  106

写一个程序,使其创建一幅图像,然后将图像所有像素值置为0,显示出来。当用户点击一个位置,便可以在此位置输入一个标签。允许使用Enter键进行编辑,以及实现一个退出键。按Enter键可以修改当前位置的标签。

#include<iostream> #include"highgui.h" #include"cv.h" using namespace std; using namespace cv; #define WIDTH 512 #define HEIGHT 512 IplImage *img = cvCreateImage(cvSize(WIDTH, HEIGHT), 8, 3); IplImage *t = cvCloneImage(img); int ok = 0; int enter = 0; int flagright=0; CvPoint point; char *c = "|"; void on_mouse(int event, int x, int y, int flags, void *param) { switch (event) { //按下左键后 case CV_EVENT_LBUTTONDOWN: if (flagright) c = "|";//判断是否按过右键 if(c[0]=='|')//判断按下左键,是移动,还是准备建立标签 enter = 1; else enter = 0; flagright = 0; ok = 1; point = cvPoint(x, y); cvPutText(img, c, point, &cvFont(1), cvScalarAll(255)); break; //按下右键后 case CV_EVENT_RBUTTONDOWN: cvCopy(img, t); enter = 0; ok = 0; flagright = 1; break; } } int main() { cvZero(img); cvZero(t); cvNamedWindow("test"); cvSetMouseCallback("test", on_mouse); while (1) { cvCopy(t, img); if (ok) cvPutText(img, c, point, &cvFont(1), CV_RGB(255, 255, 255)); cvShowImage("test", img); char a = cvWaitKey(10); //回车 if (a == 13) enter = 1; //删除,但要判断是否越下界 else if (a == 8) { if (strlen(c)) c[strlen(c) - 1] = '\0'; } else if (a == 27) break; //确定是否是初始字符'|' else if (enter&&c == "|"&&a < 126 && a>32) { char b[2] = { a,'\0' }; c = (char*)malloc(sizeof(char) * 2); strcpy(c, b); } //可显示字符,增加到c之后 else if (enter&&a < 126 && a>32) { char b[2] = { a,'\0' }; strcat(c, b); } } return 0; }
转载请注明原文地址: https://www.6miu.com/read-34230.html

最新回复(0)