OpenCV里的画图功能(line drawing是什么 Function)里面有linetype这个参数,有什么用,为什么都是8?

OpenCV(25)
一、函数讲解
1、findContours
函数说明:查找二值图像中的轮廓
函数原型:void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())
void findContours(InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset=Point())
参数说明:image
8位单通道图像。非零的像素为1的处理。零像素保持为0,因此,图像被视为二进制。可以使用compare() , inRange() , threshold() ,adaptiveThreshold() , Canny() ,函数提取的轮廓并修改图像。
检测到的轮廓。每个轮廓的点被存在vector中。
hierarchy 可选的输出vector,包含图像的拓扑信息。它有许多元素等值线数目。对于每一个第i个轮廓的 contours[i] 元素hierarchy[i][0] , hiearchy[i][1] , hiearchy[i][2] ,和hiearchy[i][3] 被设定为0,基于轮廓的下一个和以前相同的元素层次指数,即:第一个子轮廓和它的父轮廓。如果轮廓i没有下一个,前一个和父轮廓的话,hierarchy[i] 元素是负的。
轮廓检索模式:
CV_RETR_EXTERNAL
查找外边缘,各边缘以指针h_next相连,它设置所有的轮廓hierarchy[i][2=hierarchy[i][3]]=-1。
CV_RETR_LIST
检索所有的轮廓,并将其保存到一条链表当中。没有建立任何层次关系。
CV_RETR_CCOMP
检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;如果有其他轮廓里面的孔的连接组件,它仍然是在顶层。
CV_RETR_TREE
检索所有的轮廓,并重构嵌套轮廓的整个层次。
轮廓近似方法:
CV_CHAIN_APPROX_NONE
存储绝对轮廓点。也就是说轮廓任意随后的两点(X1,Y1)和(X2,Y2)是水平,垂直或对角线邻域。也就是max(abs(x1-x2),abs(y2-y1))==1。
CV_CHAIN_APPROX_SIMPLE
压缩水平,垂直和对角线段,只留下他们的终点。例如,一个向上右矩形轮廓进行编码的4分。
CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS
适用the flavors of the Teh-Chin chain approximation algorithm
可选偏移每一个轮廓点的偏移。如果从图像ROI中提取的轮廓,这是非常有用的。比如你要从图像的(100, 0)开始进行轮廓检测,那么就传入(100,0)。
注意事项:此函数使用算法[Suzuki85]从二值图像检索轮廓,对形状分析和目标检测与识别很有用。2、drawContours
函数说明:绘制轮廓线或填充轮廓。
函数原型:void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(),intmaxLevel=INT_MAX, Point offset=Point() )
参数说明:image
要绘制轮廓或填充轮廓的图像。
所有的输入轮廓。每个轮廓存储为点vector。
contourIdx 参数指示轮廓绘制。如果是否,所有的轮廓绘制。
绘制轮廓线的粗度。如果是负数(例如,thickness= CV_FILLED的),绘制内部轮廓。
线路连接。有关详细信息,请参阅line()。
可选的层次信息。它是只需要如果你想只绘制部分的轮廓(见maxLevel)。
绘制轮廓的最高水平。如果是0,只有指定的轮廓绘制。如果是1,则该函数绘制的轮廓(s)和所有的嵌套的轮廓。如果为2,则该函数绘制的轮廓,所有的嵌套的轮廓,所有的嵌套到嵌套的轮廓,
等等。此参数时,只考虑有层次。
可选轮廓移位参数。将所有绘制由指定的轮廓。比如你要从图像的(100, 0)开始进行轮廓检测,那么就传入(100, 0)。
注意事项:此函数绘制轮廓线(thickness &= 0)或者填充轮廓(thickness & 0)。
二、举例说明
#include &opencv2/highgui/highgui.hpp&
#include &opencv2/imgproc/imgproc.hpp&
#include &iostream&
#include &stdio.h&
#include &stdlib.h&
M Mat src_
int thresh = 100;
int max_thresh = 255;
RNG rng(12345);
/// 函数声明
void thresh_callback(int, void* );
int main( int argc, char** argv )
//导入图像
src = imread(&0.jpg&, 1 );
/// 转为灰度图,中值滤波
cvtColor( src, src_gray, CV_BGR2GRAY );
blur( src_gray, src_gray, Size(3,3) );
//创建窗口
char* source_window = &Source&;
namedWindow( source_window, CV_WINDOW_AUTOSIZE );
imshow( source_window, src );
createTrackbar( & Canny thresh:&, &Source&, &thresh, max_thresh, thresh_callback );
thresh_callback( 0, 0 );
waitKey(0);
return(0);
// 回调函数
void thresh_callback(int, void* )
Mat canny_
vector&vector&Point& &
vector&Vec4i&
/// 二值化
Canny( src_gray, canny_output, thresh, thresh*2, 3 );
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
//画出轮廓
Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );
for( int i = 0; i& contours.size(); i++ )
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, i, color, CV_FILLED, 8, hierarchy, 0, Point() );
namedWindow( &Contours&, CV_WINDOW_AUTOSIZE );
imshow( &Contours&, drawing );
}三、结果显示
& 结果如下图所示。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:63072次
积分:1055
积分:1055
排名:千里之外
原创:40篇
转载:21篇
评论:16条
(5)(6)(3)(4)(5)(4)(1)(1)(3)(5)(7)(4)(2)(2)(2)(4)(3)
实验说明:
  1.hog描述子在opencv中为HOGDescriptor。 
2.可以调用该描述子setSVMDetector方法给用于对hog特征进行分类的svm模型的系数赋值,这里的参数为HOGDescriptor::getDefaultPeopleDetector()时表示采用系统默认的参数,因为这些参数是用很多图片训练而来的。  
对输入图片进行行人检测时由于图片的大小不一样,所以要用到多尺度检测。这里是用hog类的方法detectMultiScale。参数解释如下:
&HOGDescriptor::detectMultiScale(constGpuMat&&img,vector&Rect&&&found_locations,double
hit_threshold=0,Size&win_stride=Size(),Size&padding=Size(),double&scale0=1.05,int&group_threshold=2)
  该函数表示对输入的图片img进行多尺度行人检测&img为输入待检测的图片;found_locations为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离;参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即滑动窗口每次增加的比例;参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。
最后对检测出来的目标矩形框,要采用一些方法处理,比如说2个目标框嵌套着,则选择最外面的那个框。
因为hog检测出的矩形框比实际人体框要稍微大些,所以需要对这些矩形框大小尺寸做一些调整。
void&Dialog::on_detectButton_clicked()&&{&&vector&Rect&&found,&found_&&&cv::HOGDescriptor&people_dectect_&&&&&&&&people_dectect_hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());&&&&&&&&&&people_dectect_hog.detectMultiScale(img,&found,&0,&Size(8,&8),&Size(32,&32),&1.05,&2);&&&&&&&&&&&&&&size_t&i,&j;&&for&(i&=&0;&i&&&found.size();&i++&)&&{&&&&&Rect&r&=&found[i];&&&span&style=&color:&rgb(255,&0,&0);&&&&&&&&&for(j&=&0;&j&&found.size();&j++)&&&&&if(j&!=&i&&&&(&span&style=&color:&rgb(255,&0,&0);&&r&found[j]&/span&)==r)&&&&&&&&&&&&&&&break;&&&&&if(j&==&found.size())&&&&&&&&&&&&&&&&&&&&&&&found_filtered.push_back(r);&&}&&&span&style=&color:&rgb(255,&0,&0);&&&&&&for(i&=&0;&i&&found_filtered.size();&i++)&&{&&&&Rect&r&=&found_filtered[i];&&&&r.x&+=&cvRound(r.width*0.1);&&&&r.width&=&cvRound(r.width*0.8);&&&&r.y&+=&cvRound(r.height*0.07);&&&&r.height&=&cvRound(r.height*0.8);&&&&rectangle(img,&r.tl(),&r.br(),&Scalar(0,&255,&0),&3);&&&&&&}&&&&imwrite(&../hog_test_result.jpg&,&img);&&&&ui-&textBrowser-&clear();&&&&ui-&textBrowser-&append(&&img&src=&http:&&}&&
void Dialog::on_detectButton_clicked()
vector&Rect& found, found_ //容器里装着Rect类型数据
cv::HOGDescriptor people_dectect_
//采用默认的已经训练好了的svm系数作为此次检测的模型
people_dectect_hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
//对输入的图片img进行多尺度行人检测
//img为输入待检测的图片;found为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离;
//参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即滑动窗口每次增加的比例;
//参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。
people_dectect_hog.detectMultiScale(img, found, 0, Size(8, 8), Size(32, 32), 1.05, 2);
//从源码中可以看出:
//#define __SIZE_TYPE__ long unsigned int
//typedef __SIZE_TYPE__ size_t;
//因此,size_t是一个long unsigned int类型
for (i = 0; i & found.size(); i++ )
& &Rect r = found[i];
//下面的这个for语句是找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的
//话,则取外面最大的那个矩形框放入found_filtered中
& &for(j = 0; j &found.size(); j++)
& &if(j != i && (r&found[j])==r)
//这可求出两个矩形的交集,如果被嵌套在里面则赶紧停止
& &if(j == found.size()) & & & & & & & &//如果没有被嵌套,则放入容器中
& & &found_filtered.push_back(r);
//在图片img上画出矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要
//做一些调整,X坐标增加点,Y坐标增加点,宽度和高度减少点,然后,给出
for(i = 0; i &found_filtered.size(); i++)
& Rect r = found_filtered[i];
& r.x += cvRound(r.width*0.1);
& r.width = cvRound(r.width*0.8);
& r.y += cvRound(r.height*0.07);
& r.height = cvRound(r.height*0.8);
& rectangle(img, r.tl(), r.br(), Scalar(0, 255, 0), 3); &
//画方框rectangle( image, pt1, pt2, randomColor(rng), MAX(thickness, -1), lineType );
& imwrite(&../hog_test_result.jpg&, img);
& ui-&textBrowser-&clear();
& ui-&textBrowser-&append(&&img src=&/a/hog_test_result.jpg&&);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:19758次
排名:千里之外
原创:13篇
转载:87篇
评论:10条
(2)(1)(1)(4)(11)(1)(6)(7)(12)(3)(1)(5)(4)(9)(7)(2)(5)(18)(9)10565人阅读
OpenCv学习笔记(14)
(一)本节教程的目的
本节你将学到:
1--如何使用Point在图像中定义2D点
2--如何以及为何使用Scalar
3--用OpenCv的函数Line绘直线
4--用OpenCvd的函数ellipse绘制椭圆
5--用OpenCv的函数rectangle绘矩形
6--用OpenCv的函数circle绘圆
7--用OpenCv的函数fillPoly绘填充多边形
(二)原理,本节我们将大量使用Point和Scalar这两个结构:
********************************************************************************************
//【1】Point2f----二维单精度浮点型点类
//【2】Point2d----二维双精度浮点型点类
//【3】Point3i----三维整形点类
********************************************************************************************
其源代码如下所示:
typedef Point_&int&
typedef Point2i
typedef Point_&float&
typedef Point_&double&
typedef Point3_&int&
typedef Point3_&float&
typedef Point3_&double&
/**********************************************************************************************
*【1】二维空间中,点的类模板
*【2】这个类定义了一个二维空间中的点,这个点的坐标可以被作为一个模板参数被指定.
*【3】这个类也有一些比较短的别名可以方便用户的使用,比如:
cv::Point, cv::Point2i, cv::Point2f and cv::Point2d
**********************************************************************************************/
//【1】这是一个典型的类模板
template&typename _Tp& class Point_
typedef _Tp value_
// various constructors
//【1】各种构造函数
Point_(_Tp _x, _Tp _y);
Point_(const Point_& pt);
Point_(const CvPoint& pt);
Point_(const CvPoint2D32f& pt);
Point_(const Size_&_Tp&& sz);
Point_(const Vec&_Tp, 2&& v);
Point_& operator = (const Point_& pt);
//! conversion to another data type
//【2】函数模板--转换为另一种类型
template&typename _Tp2& operator Point_&_Tp2&()
//! conversion to the old-style C structures
//【3】转换为旧式风格的C的结构体
operator CvPoint()
operator CvPoint2D32f()
operator Vec&_Tp, 2&()
//! dot product
//【4】点积运算
_Tp dot(const Point_& pt)
//! dot product computed in double-precision arithmetics
double ddot(const Point_& pt)
//! cross-product
//【5】向量积运算
double cross(const Point_& pt)
//! checks whether the point is inside the specified rectangle
//【6】判断当前这个点是否在指定的矩形之内
bool inside(const Rect_&_Tp&& r)
//【7】这是这个Point类模板最重要的两个信息------Point点的x和y坐标
_Tp x, //& the point coordinates
typedef Scalar_&double& S
**********************************************************************************************
/**********************************************************************************************
*【1】Scalar类的--类模板
*【2】这是一个使用4个元素指定的特殊的Vec向量类模板的类模板
*【3】通常使用的是--cv::Scalar
*【3】其实也就是说---Scalar颜色类---是一个特殊的----向量类
**********************************************************************************************/
template&typename _Tp& class Scalar_ : public Vec&_Tp, 4&
//! various constructors
//【1】默认构造函数
Scalar_();
//【2】很重要的一个默认构造函数
//【3】这个默认构造函数的四个参数分别表示RGB+Alpha颜色中的:
//【1】v0---表示RGB中的------blue-----B---蓝色分量
//【2】v1---表示RGB中的------Green----G---绿色分量
//【3】v2---表示RGB中的------Red------R---红色分量
//【4】v3---表示Alpha---------------------透明色分量
Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
Scalar_(const CvScalar& s);
Scalar_(_Tp v0);
//! returns a scalar with all elements set to v0
//【2】------------------------------成员函数--------------------------------------
//【1】返回一个用v0设置所有颜色的Scalar类
static Scalar_&_Tp& all(_Tp v0);
//! conversion to the old-style CvScalar
operator CvScalar()
//! conversion to another data type
template&typename T2& operator Scalar_&T2&()
//! per-element product
Scalar_&_Tp& mul(const Scalar_&_Tp&& t, double scale=1 )
// returns (v0, -v1, -v2, -v3)
Scalar_&_Tp& conj()
// returns true iff v1 == v2 == v3 == 0
bool isReal()
********************************************************************************************
Point数据结构表示了由其图像坐标x和y指定的2D点.可定义为:
point pt=Point(10,8);
2)Scalar类
Scalar表示了具有4个元素的数组,此类型在OpenCv中被大量用于传递像素值。/*********************************************************************************************
基本绘图函数的示例程序1
OpenCv2.4.8+VS2010
陕西师范大学
**********************************************************************************************/
/********************************【头文件.命名空间包含部分】**********************************/
#include&opencv2/core/core.hpp&
#include&opencv2/highgui/highgui.hpp&
/***************************************【宏定义部分】****************************************/
#define WINDOW_NAME1
&【绘制图像1】&
#define WINDOW_NAEM2
&【绘制图像2】&
#define WINDOW_SIZE
/***************************************【全局函数声明部分】**********************************/
void DrawEllipse(Mat img,double angle);
void DrawFilledCircle(Mat img,Point center);
void DrawPolygon(Mat img);
void DrawLine(Mat img,Point start,Point end);
/********************************************【main函数】*************************************/
int main(int argc,char** argv)
//创建空白的图像
Mat atomImg=Mat::zeros(WINDOW_SIZE,WINDOW_SIZE,CV_8UC3);
Mat rookImg=Mat::zeros(WINDOW_SIZE,WINDOW_SIZE,CV_8UC3);
//------------------------------------绘制原子的示例图------------------------------------
//【1】先绘制出椭圆
DrawEllipse(atomImg,90);
DrawEllipse(atomImg,0);
DrawEllipse(atomImg,45);
DrawEllipse(atomImg,-45);
imshow(&【第一步绘制出的椭圆图像】&,atomImg);
//【2】再绘制出圆心
DrawFilledCircle(atomImg,Point(WINDOW_SIZE/2,WINDOW_SIZE/2));
//-----------------------------------绘制组合图像----------------------------------------
//【1】先绘制会多边形
DrawPolygon(rookImg);
imshow(&【多边形】&,rookImg);
//【2】在绘制矩形
rectangle(rookImg,
Point(0,7*WINDOW_SIZE/8),
//两个对角定点
Point(WINDOW_SIZE,WINDOW_SIZE),
Scalar(0,255,255),
//矩阵颜色图像
//由于线粗为-1,,此举真将被填充
//-----------------------------------显示绘制出的图像-------------------------------------
imshow(WINDOW_NAME1,atomImg);
imshow(WINDOW_NAEM2,rookImg);
waitKey(0);
/***************************************************************************************************
绘制一条直线
1---画一条从点start到点end的直线段
2---此线段将被滑到图像img上
3---线的颜色有Scalar(0,0,0)来定义
4---线的粗细由thickness设定
5---线的类型由lineType决定,此处为8连通
函数返回值:
***************************************************************************************************/
void DrawLine(Mat img,Point start,Point end)
int thickness=2;
int lineType=8;
line(img,start,end,Scalar(0,0,0),thickness,lineType);
/***************************************************************************************************
绘制一个椭圆
1---椭圆将被画到img图像上
2---椭圆的中心点为Point(WINDOW_SIZE/2.0,WINDOW_SIZE/2.0),并且大小位于矩阵
Size(WINDOW_SIZE/4.0,WINDOW_SIZE/16.0),
3---椭圆的旋转角度为angle
4---椭圆拓展的弧度为0到360度
5--图形颜色为Scalar(255,0,255)
6--椭圆的粗度为thickness
7--线条的类型为lineType---8连通域
函数返回值:
***************************************************************************************************/
void DrawEllipse(Mat img,double angle)
int thickness=2;
int lineType=8;
ellipse(img,
Point(WINDOW_SIZE/2.0,WINDOW_SIZE/2.0),
Size(WINDOW_SIZE/4.0,WINDOW_SIZE/16.0),
Scalar(255,0,255),
thickness,
lineType);
/***************************************************************************************************
绘制一个圆
1---圆将被画到img图像上
2---圆心由center定义
3---圆的半径为:WINDOW_SIZE/32.0
4---圆的颜色Scalar(0,0,255)
5---线的粗细为thickness=-1,因此,圆将被填充
函数返回值:
***************************************************************************************************/
void DrawFilledCircle(Mat img,Point center)
int thickness=-1;
int lineType=8;
circle(img,
WINDOW_SIZE/32.0,
Scalar(0,0,255),
thickness,
lineType);
/***************************************************************************************************
绘制多边形
1---多边形将被画到img上
2---多边形的顶点集为ppt
3---要绘制的多边形定点数目为npt
4---要绘制的多边形数量为1
5---多边形的颜色定义为Scalar(255,255,255),即BGR的值为白色
函数返回值:
***************************************************************************************************/
void DrawPolygon(Mat img)
int lineType=0;
//创建一些点
Point rookPoints[1][20];
rookPoints[0][0]
WINDOW_SIZE/4,7*WINDOW_SIZE/8);
rookPoints[0][1]
3*WINDOW_SIZE/4,7*WINDOW_SIZE/8);
rookPoints[0][2]
3*WINDOW_SIZE/4,
13*WINDOW_SIZE/16 );
rookPoints[0][3]
= Point( 11*WINDOW_SIZE/16, 13*WINDOW_SIZE/16 );
rookPoints[0][4]
= Point( 19*WINDOW_SIZE/32,
3*WINDOW_SIZE/8 );
rookPoints[0][5]
3*WINDOW_SIZE/4,
3*WINDOW_SIZE/8 );
rookPoints[0][6]
3*WINDOW_SIZE/4,
WINDOW_SIZE/8 );
rookPoints[0][7]
= Point( 26*WINDOW_SIZE/40,
WINDOW_SIZE/8 );
rookPoints[0][8]
= Point( 26*WINDOW_SIZE/40,
WINDOW_SIZE/4 );
rookPoints[0][9]
= Point( 22*WINDOW_SIZE/40,
WINDOW_SIZE/4 );
rookPoints[0][10] = Point( 22*WINDOW_SIZE/40,
WINDOW_SIZE/8 );
rookPoints[0][11] = Point( 18*WINDOW_SIZE/40,
WINDOW_SIZE/8 );
rookPoints[0][12] = Point( 18*WINDOW_SIZE/40,
WINDOW_SIZE/4 );
rookPoints[0][13] = Point( 14*WINDOW_SIZE/40,
WINDOW_SIZE/4 );
rookPoints[0][14] = Point( 14*WINDOW_SIZE/40,
WINDOW_SIZE/8 );
rookPoints[0][15] = Point(
WINDOW_SIZE/4,
WINDOW_SIZE/8 );
rookPoints[0][16] = Point(
WINDOW_SIZE/4,
3*WINDOW_SIZE/8 );
rookPoints[0][17] = Point( 13*WINDOW_SIZE/32,
3*WINDOW_SIZE/8 );
rookPoints[0][18] = Point(
5*WINDOW_SIZE/16, 13*WINDOW_SIZE/16 );
rookPoints[0][19] = Point(
WINDOW_SIZE/4,
13*WINDOW_SIZE/16 );
const Point* ppt[1]={rookPoints[0]};
int npt[]={20};
fillPoly(img,
Scalar(255,255,255),
lineType);

参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:40284次
排名:千里之外
原创:52篇
(40)(7)(8)opencv 3.0 绘图 highgui
opencv 3.0 绘图 highgui
[摘要:画图的时间最经常使用的是highgui 需注重的是:画图添补 须要赋thickness thickness– 画图边框的细细. 背(CV_FILLED = -1) 相干函数先容 Point 该数据布局透露表现了由其图象坐标 战 指定的2D面。可定]
绘图的时候最常用的是highgui
需注意的是:绘图填充 需要赋值thickness&
thickness&– 绘图边框的粗细. 负值(CV_FILLED = -1)
相关函数介绍
该数据结构表示了由其图像坐标 和 指定的2D点。可定义为:
pt.x = 10;
Point pt =&Point(10, 8);
表示了具有4个元素的数组。次类型在OpenCV中被大量用于传递像素值。
本节中,我们将进一步用它来表示RGB颜色值(三个参数)。如果用不到第四个参数,则无需定义。
我们来看个例子,如果给出以下颜色参数表达式:
Scalar( a, b, c )
那么定义的RGB颜色值为:Red = c,&Green = b&and&Blue= a
C++:&void rectangle(Mat&&img,Point&pt1, Pointpt2, const Scalar&color, intthickness=1,intlineType=8, intshift=0)
C++:&void rectangle(Mat&&img,Rect&rec, const Scalar&color, intthickness=1, intlineType=8,intshift=0 )
Parameters:
img&– 画矩形的对象 pt1&– 矩形的一个顶点,左上角的. pt2&– 另一个顶点,右下角的. rec&– 确定矩形的另一种方式,给左上角坐标和长宽 color&– 指定矩形的颜色或亮度(灰度图像),scalar(255,0,255)既可指定. thickness&– 矩形边框的粗细. 负值(like CV_FILLED)表示要画一个填充的矩形 lineType&– 边框线型. (&&&
8 (or 0) - 8-connected line(8邻接)连接 线。
4 - 4-connected line(4邻接)连接线。
CV_AA - antialiased 线条。)
shift&–坐标点的小数点位数
C++: void line(Mat& img, Point pt1,Point pt2, const Scalar& color, int thickness=1, int lineType=8,int shift=0)
Parameters:
img – 图像. pt1 – 线条起点. pt2 – 线条终点. color – 线条颜色. thickness – 线条宽度. lineType – 线型
Type of the line:
8 (or omitted) - 8-connected line. 4 - 4-connected line. CV_AA - antialiased line.
shift – 坐标点小数点位数.
C++:&void circle(Mat&img, Point&center, intradius, const Scalar&color,intthickness=1, intlineType=8, intshift=0)
Parameters:
img&– 要画圆的那个矩形. center&– 圆心坐标. radius&– 半径. color&– 圆边框颜色,scalar类型的 thickness&– 正值表示圆边框宽度. 负值表示画一个填充圆形 lineType&– 圆边框线型 shift&– 圆心坐标和半径的小数点位数
C++: void ellipse(Mat& img, Point center,Size axes, double angle, double startAngle, double endAngle, const Scalar& color,int thickness=1, int lineType=8, int shift=0)
C++: void ellipse(Mat& img, constRotatedRect& box, const Scalar& color, int thickness=1, int lineType=8)
Parameters:
img&– 椭圆所在图像. center&– 椭圆中心. axes&– 椭圆主轴一半的长度 angle&– 椭圆旋转角度 startAngle&– 椭圆弧起始角度 endAngle&–椭圆弧终止角度 box&– 指定椭圆中心和旋转角度的信息,通过&RotatedRect&或 CvBox2D. 这表示椭圆画在旋转矩形上(矩形是不可见的,只是指定了一个框而已)color&– 椭圆边框颜色. thickness&– 正值代表椭圆边框宽度,负值代表填充的椭圆 lineType&– 线型 shift&– 椭圆中心坐标和坐标轴的小数点位数
C++: void polylines(Mat& img, const Point** pts, const int* npts, int ncontours, bool isClosed, const Scalar& color, int thickness=1, int lineType=8, int shift=0 )
C++: void polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar& color, int thickness=1, int lineType=8, int shift=0 )
Parameters:
img&– 折线所在图像. pts&– 折线中拐点坐标指针. npts&– 折线拐点个数指针. ncontours&– 折线线段数量. isClosed&– 折线是否闭合. color&– 折线颜色. thickness&– 折线宽度. lineType&– 线型. shift&– 顶点坐标小数点位数.
C++: void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )
Parameters:
img&– 显示文字所在图像. text&– 待显示的文字. org&– 文字在图像中的左下角 坐标. font&–&字体结构体. fontFace&– 字体类型, 可选择字体:FONT_HERSHEY_SIMPLEX,&FONT_HERSHEY_PLAIN,&FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX,&FONT_HERSHEY_TRIPLEX,&FONT_HERSHEY_COMPLEX_SMALL,&FONT_HERSHEY_SCRIPT_SIMPLEX, orFONT_HERSHEY_SCRIPT_COMPLEX,以上所有类型都可以配合&FONT_HERSHEY_ITALIC使用,产生斜体效果。fontScale&– 字体大小,该值和字体内置大小相乘得到字体大小 color&– 文本颜色 thickness&– &写字的线的粗细,类似于0.38的笔尖和0.5的笔尖 lineType&– 线性. bottomLeftOrigin&– true,&图像数据原点在左下角. Otherwise,&图像数据原点在左上角.
* @file Drawing_1.cpp
* @brief Simple sample code
#include &opencv2/core/core.hpp&
#include &opencv2/highgui/highgui.hpp&
#define w 400
/// Function headers
void MyEllipse( Mat img, double angle );
void MyFilledCircle( Mat img, Point center );
void MyPolygon( Mat img );
void MyLine( Mat img, Point start, Point end );
* @function main
* @brief Main function
int main( void ){
/// Windows names
char atom_window[] = &Drawing 1: Atom&;
char rook_window[] = &Drawing 2: Rook&;
/// Create black empty images
Mat atom_image = Mat::zeros( w, w, CV_8UC3 );
Mat rook_image = Mat::zeros( w, w, CV_8UC3 );
/// 1. Draw a simple atom:
/// -----------------------
/// 1.a. Creating ellipses
MyEllipse( atom_image, 90 );
MyEllipse( atom_image, 0 );
MyEllipse( atom_image, 45 );
MyEllipse( atom_image, -45 );
/// 1.b. Creating circles
MyFilledCircle( atom_image, Point( w/2, w/2) );
/// 2. Draw a rook
/// ------------------
/// 2.a. Create a convex polygon
MyPolygon( rook_image );
/// 2.b. Creating rectangles
rectangle( rook_image,
Point( 0, 7*w/8 ),
Point( w, w),
Scalar( 0, 255, 255 ),
RotatedRect rRect = RotatedRect(Point2f(100,100), Size2f(100,50), 30);
ellipse(rook_image, rRect, Scalar(255,255,0));
/// 2.c. Create a few lines
MyLine( rook_image, Point( 0, 15*w/16 ), Point( w, 15*w/16 ) );
MyLine( rook_image, Point( w/4, 7*w/8 ), Point( w/4, w ) );
MyLine( rook_image, Point( w/2, 7*w/8 ), Point( w/2, w ) );
MyLine( rook_image, Point( 3*w/4, 7*w/8 ), Point( 3*w/4, w ) );
/// 3. Display your stuff!
imshow( atom_window, atom_image );
moveWindow( atom_window, 0, 200 );
imshow( rook_window, rook_image );
moveWindow( rook_window, w, 200 );
waitKey( 0 );
return(0);
/// Function Declaration
* @function MyEllipse
* @brief Draw a fixed-size ellipse with different angles
void MyEllipse( Mat img, double angle )
int thickness = 2;
int lineType = 8;
ellipse( img,
Point( w/2, w/2 ),
Size( w/4, w/16 ),
Scalar( 255, 0, 0 ),
thickness,
lineType );
* @function MyFilledCircle
* @brief Draw a fixed-size filled circle
void MyFilledCircle( Mat img, Point center )
int thickness = -1;
int lineType = 8;
circle( img,
Scalar( 0, 0, 255 ),
thickness,
lineType );
* @function MyPolygon
* @function Draw a simple concave polygon (rook)
void MyPolygon( Mat img )
int lineType = 8;
/** Create some points */
Point rook_points[1][20];
rook_points[0][0]
rook_points[0][1]
rook_points[0][2]
13*w/16 );
rook_points[0][3]
= Point( 11*w/16, 13*w/16 );
rook_points[0][4]
= Point( 19*w/32,
rook_points[0][5]
rook_points[0][6]
rook_points[0][7]
= Point( 26*w/40,
rook_points[0][8]
= Point( 26*w/40,
rook_points[0][9]
= Point( 22*w/40,
rook_points[0][10] = Point( 22*w/40,
rook_points[0][11] = Point( 18*w/40,
rook_points[0][12] = Point( 18*w/40,
rook_points[0][13] = Point( 14*w/40,
rook_points[0][14] = Point( 14*w/40,
rook_points[0][15] = Point(
rook_points[0][16] = Point(
rook_points[0][17] = Point( 13*w/32,
rook_points[0][18] = Point(
5*w/16, 13*w/16 );
rook_points[0][19] = Point(
13*w/16 );
const Point* ppt[1] = { rook_points[0] };
int npt[] = { 20 };
fillPoly( img,
Scalar( 255, 255, 255 ),
lineType );
* @function MyLine
* @brief Draw a simple line
void MyLine( Mat img, Point start, Point end )
int thickness = 2;
int lineType = 8;
line( img,
Scalar( 0, 0, 0 ),
thickness,
lineType );
http://blog.csdn.net/ubunfans/article/details/
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊

我要回帖

更多关于 opencv line 的文章

 

随机推荐