#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void drawDashRect(CvArr* img,int linelength,int dashlength,CvRect* blob,CvScalar color,int thickness)
{
int w=cvRound(blob->width);//width
int h=cvRound(blob->height);//height
int tl_x=cvRound(blob->x);//top left x
int tl_y=cvRound(blob->y);//top left y
int totallength=dashlength+linelength;
int nCountX=w/totallength;//
int nCountY=h/totallength;//
CvPoint start,end;//start and end point of each dash
//draw the horizontal lines
start.y=tl_y;
start.x=tl_x;
end.x=tl_x;
end.y=tl_y;
for (int i=0;i<nCountX;i++)
{
end.x=tl_x+(i+1)*totallength-dashlength;//draw top dash line
end.y=tl_y;
start.x=tl_x+i*totallength;
start.y=tl_y;
cvLine(img,start,end,color,thickness);
}
for (int i=0;i<nCountX;i++)
{
start.x=tl_x+i*totallength;
start.y=tl_y+h;
end.x=tl_x+(i+1)*totallength-dashlength;//draw bottom dash line
end.y=tl_y+h;
cvLine(img,start,end,color,thickness);
}
for (int i=0;i<nCountY;i++)
{
start.x=tl_x;
start.y=tl_y+i*totallength;
end.y=tl_y+(i+1)*totallength-dashlength;//draw left dash line
end.x=tl_x;
cvLine(img,start,end,color,thickness);
}
for (int i=0;i<nCountY;i++)
{
start.x=tl_x+w;
start.y=tl_y+i*totallength;
end.y=tl_y+(i+1)*totallength-dashlength;//draw right dash line
end.x=tl_x+w;
cvLine(img,start,end,color,thickness);
}
}
int main(int argc, char* argv[])
{
IplImage *img = cvLoadImage( "F:\\chen\\车辆跟踪对比图\\blurcar4 0024.jpg");
CvRect rect1 = cvRect(100,200,200,100);
drawDashRect(img,1,2,&rect1,CV_RGB(255,255,255),1);
cvShowImage("1",img);
cvWaitKey(0);
return 0;
}做对比实验时,经常用到虚线框,但是opencv中没有找到直接函数,所以就在网上看见大神写的,借过来用,怕以后忘记,所以现在记下来
版权声明:本文为xiaopang_yan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。