代码拉取完成,页面将自动刷新
#include "mousedraw.h"
BoxExtractor::BoxExtractor()
{
}
void BoxExtractor::mouseHandler(int event, int x, int y, int flags, void *param){
BoxExtractor *self =static_cast<BoxExtractor*>(param);
self->opencv_mouse_callback(event,x,y,flags,param);
}
void BoxExtractor::opencv_mouse_callback( int event, int x, int y, int , void *param ){
handlerT * data = (handlerT*)param;
switch( event ){
// update the selected bounding box
case EVENT_MOUSEMOVE:
if( data->isDrawing ){
data->points.push_back (cv::Point(x,y));
}
break;
// start to select the bounding box
case EVENT_LBUTTONDOWN:
data->isDrawing = true;
data->points.clear ();
data->points.push_back (cv::Point(x,y));
break;
// cleaning up the selected bounding box
case EVENT_LBUTTONUP:
data->isDrawing = false;
break;
}
}
Mat BoxExtractor::MouseDraw(Mat img){
return MouseDraw("DRAW AN DIGIT", img,Scalar(0,0,0),4);
}
Mat BoxExtractor::MouseDraw(const std::string& windowName, Mat img,Scalar color, int border){
int key=0;
imshow(windowName,img);
printf("DRAW AN DIGIT and then press SPACE/BACKSPACE/ENTER button!\n");
params.image=img.clone();
setMouseCallback( windowName, mouseHandler, (void *)¶ms );
while(!(key==32 || key==27 || key==13)){
int length = params.points.size ();
for(int i = 0;i<length && length > 2;i++){
if(i == length-1){
cv::line (params.image,params.points.at (i),params.points.at (i),color,border);
}else{
cv::line (params.image,params.points.at (i),params.points.at (i+1),color,border);
}
}
imshow(windowName,params.image);
// params.image=img.clone();
key=waitKey(1);
}
return params.image;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。