一.PointScalar

使用cv::Point与cv::Scalar

Point表示2D平面上一个点x,y

Point p;

p.x = 10;

p.y = 8;

或者

p = Pont(10,8);

Scalar表示四个元素的向量

Scalar(a, b, c);// a = blue, b = green, c = red表示RGB三个通道

=========================================================================

二.使用line,ellipse,ellipse,rectangle,fillPoly函数绘制线、矩形、园、椭圆等基本几何形状

画线 cv::line (LINE_4\LINE_8\LINE_AA

void cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours, int is_closed,CvScalar color, int thickness=1, int line_type=8, int shift=0 );

参数说明:
img       输入图像
pts       折线的顶点指针数组
npts     折线的定点个数数组,也可以认为是pts指针数组的大小
contours   折线的线段数量
is_closed  指出多边形是否封闭。如果封闭,函数将起始点和结束点连线。
color         折线的颜色
thickness  线条的粗细程度
line_type  线段的类型。参见cvLine
shift          顶点的小数点位数

画椭圆cv::ellipse

void DrawEllipse(Mat img, double angle){int thickhness = 2;int lineType = 8;ellipse(   img,Point(WINDOW_WIDTH / 2, WINDOW_WIDTH / 2),Size(WINDOW_WIDTH / 4, WINDOW_WIDTH / 16),angle,0, 360,Scalar(255, 129, 0),thickhness,lineType);}

画矩形cv::rectangle

rectangle( 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坐标点的小数点位数

画圆cv::circle

void DrawFilledCircle(Mat img, Point center)  {    int thickness = -1; int lineType = 8;  circle(img, center, WINDOW_WIDTH / 32,Scalar(0, 0, 255),thickness, lineType);}

画填充cv::fillPoly

函数可以填充复杂的区域,例如,有漏洞的区域和有交叉点的区域等等。

void cvFillPoly( CvArr* img, CvPoint** pts, int* npts, int contours,CvScalar color, int line_type=8, int shift=0 );

img            输入图像
pts             指向多边形的数组指针
npts           多边形的顶点个数的数组
contours    组成填充区域的线段的数量
color          多边形的颜色
line_type   组成多边形的线条的类型
shift           顶点坐标的小数点位数

绘制文字cv: putTex

void putText(  InputOutputArray img,const String& text,Point org,int fontFace,double fontScale,Scalar color,int thickness = 1,int lineType = LINE_8,bool bottomLeftOrigin = false );

参数说明

cv::Mat& img                       待绘制的图像,作为画布

const string& text                   待绘制的文字

cv::Point org                        文本框的左下角

int fontFace                        字体 (如cv::FONT_HERSHEY_PLAIN)

double fontScale                    尺寸因子,值越大文字越大

Scalar color                        线条的颜色(RGB)

int thickness = 1                    线条宽度,默认为1

int lineType = LINE_8               线型,4邻域或8邻域,默认8邻域

bool bottomLeftOrigin = false         true=‘origin at lower left’

=========================================================================

三.Opencv随机数的生成

RNG类是opencv里C++的随机数产生器。它可产生一个64位的int随机数。目前可按均匀分布和高斯分布产生随机数。随机数的产生采用的是Multiply-With-Carry算法和Ziggurat算法。

RNG可以产生3种随机数
RNG(int seed)         使用种子seed产生一个64位随机整数,默认-1
RNG::uniform( )      产生一个均匀分布的随机数
RNG::gaussian( )    产生一个高斯分布的随机数

RNG::uniform(a, b )  返回一个[a,b)范围的均匀分布的随机数,a,b的数据类型要一致,而且必须是int、float、double中的一种,默认是int。

RNG::gaussian( σ)   返回一个均值为0,标准差为σ的随机数。如果要产生均值为λ,标准差为σ的随机数,可以λ+ RNG::gaussian( σ)

生成高斯随机数gaussian (double sigma)

生成正态分布随机数uniform (int a, int b)

=========================================================================

代码实现

#include"stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;Mat bgImage;
const char* drawdemo_win = "draw shapes and text demo";
void MyLines();            //画线
void MyRectangle();        //画矩形
void MyEllipse();           //画椭圆
void MyCircle();            //画圆形
void MyPolygon();          //填充
void RandomLineDemo();void MyLines() {Point p1 = Point(20, 30);Point p2;p2.x = 400;p2.y = 400;Scalar color = Scalar(0, 0, 255);line(bgImage, p1, p2, color, 1, LINE_AA);
}void MyRectangle() {Rect rect = Rect(200, 100, 300, 300);Scalar color = Scalar(255, 0, 0);rectangle(bgImage, rect, color, 2, LINE_8);
}void MyEllipse() {Scalar color = Scalar(0, 255, 0);ellipse(bgImage, Point(bgImage.cols / 2, bgImage.rows / 2), Size(bgImage.cols / 4, bgImage.rows / 8), 90, 0, 360, color, 2, LINE_8);
}void MyCircle() {Scalar color = Scalar(0, 255, 255);Point center = Point(bgImage.cols / 2, bgImage.rows / 2);circle(bgImage, center, 150, color, 2, 8);
}void MyPolygon() {Point pts[1][5];pts[0][0] = Point(100, 100);pts[0][1] = Point(100, 200);pts[0][2] = Point(200, 200);pts[0][3] = Point(200, 100);pts[0][4] = Point(100, 100);const Point* ppts[] = { pts[0] };int npt[] = { 5 };Scalar color = Scalar(255, 12, 255);fillPoly(bgImage, ppts, npt, 1, color, 8);
}void RandomLineDemo() {RNG rng(12345);Point pt1;Point pt2;Mat bg = Mat::zeros(bgImage.size(), bgImage.type());namedWindow("random line demo", 0);resizeWindow("random line demo",400, 400);for (int i = 0; i < 100000; i++) {pt1.x = rng.uniform(0, bgImage.cols);pt2.x = rng.uniform(0, bgImage.cols);pt1.y = rng.uniform(0, bgImage.rows);pt2.y = rng.uniform(0, bgImage.rows);Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));if (waitKey(50) > 0) {break;}line(bg, pt1, pt2, color, 1, 8);imshow("random line demo", bg);}
}
int main(int argc, char** argv) {bgImage = imread("F:/photo/c.jpg");if (!bgImage.data) {printf("could not load image...\n");return -1;}//MyLines();//MyRectangle();MyEllipse();//MyCircle();//MyPolygon();putText(bgImage, "Hello OpenCV", Point(300, 300), FONT_HERSHEY_COMPLEX, 1.0, Scalar(12, 23, 200), 3, 8);namedWindow(drawdemo_win,0);resizeWindow(drawdemo_win, 400, 400);imshow(drawdemo_win, bgImage);RandomLineDemo();waitKey(0);return 0;
}

 =========================================================================

图像处理效果:

void MyLines();            //画线

void MyRectangle();        //画矩形

void MyEllipse();           //画椭圆

void MyCircle();            //画圆形

void MyPolygon();          //填充

void RandomLineDemo();

OpenCV图像处理学习六,像素操作,使用line,ellipse,ellipse,rectangle,fillPoly函数绘制线、矩形、圆、椭圆等基本图形以及C++随机数产生器RNG的应用相关推荐

  1. OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽

    OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...

  2. OpenCV 图像处理学习手册:1~5

    原文:Learning Image Processing with OpenCV 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 计算机视觉 译文集],采用译后编辑(MT ...

  3. OpenCV图像处理学习四,像素的读写操作和图像反差函数操作

    一.读写图像 imread 可以指定加载为灰度或者RGB图像 Imwrite 保存图像文件,类型由扩展名决定 二.读写像素 读一个GRAY(灰度图)像素点的像素值(CV_8UC1) Scalar in ...

  4. opencv图像处理学习(二十六)——噪声

    1.噪声量化 图像噪声是图像在获取或传输的过程中受到随机信号干扰,妨碍人们对图像处理及分析处理的信号.很多时候将图像噪声看作多位随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即使用其概率分布 ...

  5. opencv图像处理学习随笔:帮助文档运算公式中saturate的含义

    ☞ ░ 前往老猿Python博文目录 ░ 在opencv文档中中,加法运算的一种计算公式如下: dst(I)=saturate(src1(I)+src2(I))if mask(I)≠0 类似的公式还有 ...

  6. OpenCV图像处理学习二十,图像直方图均衡化原理与实现

    一.图像直方图的概念 图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图.直方图反映了图像灰度的分布情况,是图像的统计学特征.图像的灰度直方 ...

  7. opencv图像处理学习(六十八)——肤色检测

    参考链接:https://blog.csdn.net/qq_22527639/article/details/81501565. 1.肤色检测   肤色检测技术利用了计算机对人体皮肤像素的分析过程,随 ...

  8. python+OpenCV图像处理(六)图像平滑与滤波

    图像平滑与滤波 运用它,首先就要了解它,什么是平滑滤波? 平滑滤波是低频增强的空间域滤波技术.它的目的有两类:一类是模糊:另一类是消除噪音.空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平 ...

  9. OpenCV图像处理学习十八,霍夫变换实现交通车道线检测

    一.霍夫变换 经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆.霍夫变换运用两个坐标空间之间的变换,将在一个空间中具有相同形状的曲线或直线映射到另一个坐标 ...

最新文章

  1. Datawahle文化衫来了!
  2. Oracle怎么查外键建在哪个表上
  3. PHP过滤器 filter_has_var() 函数
  4. 所有库在门不显示封装_COB全天候通透屏,在商业显示中的场景应用
  5. Splitting into digits
  6. webbench windows_linux下的web并发测试工具汇总:ab, siege和webbench
  7. C学习杂记(四)sizeof计算联合体大小
  8. spring.net 对象创建 几种情况
  9. python3 Tkinter GUI 试水
  10. 微型计算机控制技术小论文,微型计算机控制技术结课论文..doc
  11. halcon教程- 边缘检测 亚像素边缘提取 轮廓提取
  12. 弹性系数和线径的计算公式_压缩弹簧的弹性系数计算
  13. java的duplicate用法_Java FloatBuffer duplicate()用法及代码示例
  14. android 开机自动运行程序
  15. LeNet-5 手写字体识别模型
  16. 神舟战神调节风扇热键_神舟GX9电脑热键驱动
  17. 如何通过安装包安装应用到手机
  18. 文件服务器搭建手机,自己搭建手机云服务器
  19. linux 原子变量
  20. ubuntu禁用笔记本触摸板

热门文章

  1. 元宇宙深度报告丨IPFSFilecoin重大发展契机
  2. /toplan/phpsms#寄生代理器发送短信
  3. Microsoft Graph for Office 365 - 身份验证路线图和访问令牌
  4. 【算法模板】dfs 八皇后问题
  5. 使用ps制作网页展示
  6. python解析html基础操作
  7. 跨平台应用开发进阶(八) :uni-app 实现Android原生APP-云打包集成极光推送(JG-JPUSH)详细教程
  8. 数据库having的用法介绍
  9. MySQL数据库笔记(二)-------查询
  10. 第二章:图像合成技能