我正在使用OpenCV4Android版本2.4.11。我正在从相机读取帧,我检测到帧中的任何矩形形状。然后我尝试围绕检测到的对象绘制一个半透明的矩形。
我想要做的是,在检测到的物体的四个角上画一个半透明的矩形。但是,在openCV中,你可以通过仅将它的两个点“topLeft和BottomRight”分别绘制一个矩形。
请让我知道如何绘制一个矩形,方法是通过拼接topLeft和BottomRight角来拼接它的四个角。
下面张贴的图片是为了向您展示我的尝试,并告诉您我想要的是在四个检测到的角落周围绘制一个矩形“红色,绿色,蓝色,白色”
图片:
答案 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