如何通过指定4个角来绘制矩形

时间:2016-11-07 08:36:52

标签: opencv image-processing object-detection opencv4android

我正在使用OpenCV4Android版本2.4.11。我正在从相机读取帧,我检测到帧中的任何矩形形状。然后我尝试围绕检测到的对象绘制一个半透明的矩形。

我想要做的是,在检测到的物体的四个角上画一个半透明的矩形。但是,在openCV中,你可以通过仅将它的两个点“topLeft和BottomRight”分别绘制一个矩形。

请让我知道如何绘制一个矩形,方法是通过拼接topLeft和BottomRight角来拼接它的四个角。

下面张贴的图片是为了向您展示我的尝试,并告诉您我想要的是在四个检测到的角落周围绘制一个矩形“红色,绿色,蓝色,白色”

图片

enter image description here

2 个答案:

答案 0 :(得分:2)

OpenCV不提供矩形绘图功能,但您可以使用您计算的4个点生成左上角和右下角:

假设您的4个点是 - (tlx,tly),(trx,try),(blx,bly)(brx,bry),其中tl是左上角,br是右下角。

然后你可以计算:

x1=min(tlx,trx,brx,blx);//top-left pt. is the leftmost of the 4 points
x2=max(tlx,trx,brx,blx);//bottom-right pt. is the rightmost of the 4 points
y1=min(tly,try,bry,bly);//top-left pt. is the uppermost of the 4 points
y2=max(tly,try,bry,bly);//bottom-right pt. is the lowermost of the 4 points

这假设点(0,0)出现在左上角。 现在你可以使用:

rectangle(src, Point(x1,y1), Point(x2,y2),Color,Thickness,other_params);

答案 1 :(得分:2)

与@Saransh相同的想法,但为我编译:

auto x1 = std::min(tlx, std::min(trx, std::min(brx, blx))); // top-left pt. is the leftmost of the 4 points
auto x2 = std::max(tlx, std::max(trx, std::max(brx, blx))); // bottom-right pt. is the rightmost of the 4 points
auto y1 = std::min(tly, std::min(try, std::min(bry, bly))); //top-left pt. is the uppermost of the 4 points
auto y2 = std::max(tly, std::max(try, std::max(bry, bly))); //bottom-right pt. is the lowermost of the 4 points