今天讲一下通过opencv的Line函数,在图像中绘制一条我们想要的直线或者线段,以及使用Rectangle函数绘制矩形;
创建一个色彩值.
#define CV_RGB( r, g, b ) cvScalar( (b), (g), (r) )
绘制连接两个点的线段
void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
int thickness=1, int line_type=8, int shift=0 );
img:图像;
pt1:线段的第一个端点。
pt2:线段的第二个端点。
color:线段的颜色。
thickness:线段的粗细程度。
line_type:线段的类型。
8 (or 0) – 8-connected line(8邻接)连接 线。
4 – 4-connected line(4邻接)连接线。
CV_AA – antialiased 线条。
shift:坐标点的小数点位数。
函数cvLine 在图像中的点1和点2之间画一条线段。线段被图像或感兴趣的矩形(ROI rectangle)所裁剪。对于具有整数坐标的non-antialiasing 线条,使用8-连接或者4-连接Bresenham 算法。画粗线条时结尾是圆形的。画 antialiased 线条使用高斯滤波。要指定线段颜色,用户可以使用使用宏CV_RGB( r, g, b )。
绘制简单、指定粗细或者带填充的 矩形
void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
int thickness=1, int line_type=8, int shift=0 );
img:图像.
pt1:矩形的一个顶点。
pt2:矩形对角线上的另一个顶点
color:线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。
thickness:组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。
line_type:线条的类型。见cvLine的描述
shift:坐标点的小数点位数。
函数 cvRectangle 通过对角线上的两个顶点绘制矩形。
line1.cpp
#include
using namespace cv;
int main()
{
Mat src = imread("./Lina.jpg");
//Rect rect(230, 5, 280, 290);
int x=50;
int y=50;
Rect rect(x, y, 40, 20);
cv::line(src,Point(50,50),Point(90,70),1,LINE_4,0);
cv::rectangle(src, rect, Scalar(255, 0, 0),1, LINE_8,0);
// cv::rectangle(src, Point(230, 5), Point(510, 295), Scalar(255, 255, 255), 5, LINE_8, 0);
imwrite("src.jpg", src);
imshow("src", src);
waitKey(0);
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( test )
find_package( OpenCV REQUIRED )
add_executable( test line1.cpp )
target_link_libraries( test ${OpenCV_LIBS} )
# cmake .
# make
# ./test
原图
叠加后