OpenCv(5)--绘制形状与文字

1、画线
line()
void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
第一个参数img:要划的线所在的图像;
第二个参数pt1:直线起点
第二个参数pt2:直线终点
第三个参数color:直线的颜色 e.g:Scalor(0,0,255)
第四个参数thickness=1:线条粗细
第五个参数线条类型。CV_AA - antialiased 线条。
第六个参数:坐标点的小数点位数。
例:

Point p1 = Point(20,30);
point p2;
p2.x = 300;
p2.y = 300;
Scalar color = Scalar(0,255,255);
line(bgImage,p1,p2,color,1,Line_AA);//Line_AA为反锯齿

2、画椭圆
ellipse()
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,
int thickness=1, int line_type=8, int shift=0 );
(1)img图像。
(2)center圆心坐标。
(3)radius 圆形的半径。
(4)color线条的颜色。
(5)thickness如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。
(6)line_type线条的类型。见 cvLine 的描述
(7)shift圆心坐标点和半径值的小数点位数。

Scalar color = Scalar(0,255,255);
ellipse(bgImage,Point(bgImage.cols/2,bgImage.rows/2),Size(bgImage.cols/4,bgImage.rows/8),90,0,360,color,2,Line_8);

3、画矩形
rectangle()
通过传入矩形画矩形:
void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0 )

Rect rect = Rect(200,100,300,300);
Scalar color = Scalar(255,0,0);
rectangle(bgImage,rect,color,2,Line_8);

4、画圆
circle()
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0)

Scalar color = Scalar(0255255);
circle(bgImage,Point(bgImage.rpws/2,bgImage.cols/2),150,color,1,Line_AA);

5、画填充
fillPoly()

#include <iostream>    
#include <opencv2/opencv.hpp>  

using namespace cv;  
using namespace std;  


int main()  
{  
    Mat src = imread("02.jpg");  

    Point root_points[1][6];  
    root_points[0][0] = Point(215, 220);  
    root_points[0][1] = Point(460, 225);  
    root_points[0][2] = Point(466, 450);  
    root_points[0][3] = Point(235, 465);  
    root_points[0][4] = Point(260, 390);  
    root_points[0][5] = Point(96, 310);  

    const Point* ppt[1] = { root_points[0] };  
    int npt[] = { 6 };  
    polylines(src, ppt, npt, 1, 1, Scalar(0,0,0), 1, 8, 0);  
    imshow("Test", src);  

    cv::Mat mask_ann, dst;  
    src.copyTo(mask_ann);  
    mask_ann.setTo(cv::Scalar::all(0));  

    fillPoly(mask_ann, ppt, npt, 1, Scalar(255, 255, 255));  
    imshow("mask_ann", mask_ann);  
    src.copyTo(dst, mask_ann);  
    imshow("dst", dst);  
    waitKey();  
    return 0;  
}  

6、绘制文字
void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )

img – 显示文字所在图像.
text – 待显示的文字.
org – 文字在图像中的左下角 坐标.
font – 字体结构体.
fontFace – 字体类型, 可选择字体:
fontScale – 字体大小,该值和字体内置大小相乘得到字体大小
color – 文本颜色
thickness –  写字的线的粗细
lineType – 线型.
bottomLeftOrigin – true, 图像数据原点在左下角. Otherwise, 图像数据原点在左上角.
    Mat image2;  
    for(int i = 0;i < 255;i += 2)  
    {  
        image2 = image - Scalar::all(i);  
        putText(image2,"OpenCV Forever!",org,FONT_HERSHEY_COMPLEX,  
        3,Scalar(i,i,255),5,lineType);  
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用OpenCV库和Python语言来识别形状。首先,你需要安装OpenCV库,可以使用pip命令进行安装: ``` pip install opencv-python ``` 下面是一个简单的示例代码,用于识别图像中的形状: ```python import cv2 # 读取图像 image = cv2.imread('image_path.jpg') # 转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用Canny边缘检测算法检测边缘 edges = cv2.Canny(gray, 50, 150) # 查找轮廓 contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 遍历轮廓 for contour in contours: # 计算轮廓的近似多边形 epsilon = 0.04 * cv2.arcLength(contour, True) approx = cv2.approxPolyDP(contour, epsilon, True) # 根据多边形的边数确定形状类型 sides = len(approx) if sides == 3: shape_type = 'Triangle' elif sides == 4: shape_type = 'Rectangle' elif sides == 5: shape_type = 'Pentagon' else: shape_type = 'Other' # 在图像上绘制形状文字 cv2.drawContours(image, [approx], 0, (0, 255, 0), 2) cv2.putText(image, shape_type, (approx.ravel()[0], approx.ravel()[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2) # 显示结果图像 cv2.imshow('Shapes', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在代码中,我们首先读取图像并将其转换为灰度图像。然后使用Canny边缘检测算法检测图像的边缘。接下来使用`cv2.findContours()`函数查找轮廓,并使用`cv2.approxPolyDP()`函数计算轮廓的近似多边形。根据多边形的边数,我们确定形状的类型,并在图像上绘制轮廓和形状类型。 请注意,你需要将`image_path.jpg`替换为你要识别形状的图像路径。这只是一个简单的示例代码,你可以根据实际需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值