OpenCV图像处理学习六,像素操作,使用line,ellipse,ellipse,rectangle,fillPoly函数绘制线、矩形、圆、椭圆等基本图形以及C++随机数产生器RNG的应用
一.Point与Scalar
使用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的应用相关推荐
- OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽
OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...
- OpenCV 图像处理学习手册:1~5
原文:Learning Image Processing with OpenCV 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 计算机视觉 译文集],采用译后编辑(MT ...
- OpenCV图像处理学习四,像素的读写操作和图像反差函数操作
一.读写图像 imread 可以指定加载为灰度或者RGB图像 Imwrite 保存图像文件,类型由扩展名决定 二.读写像素 读一个GRAY(灰度图)像素点的像素值(CV_8UC1) Scalar in ...
- opencv图像处理学习(二十六)——噪声
1.噪声量化 图像噪声是图像在获取或传输的过程中受到随机信号干扰,妨碍人们对图像处理及分析处理的信号.很多时候将图像噪声看作多位随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即使用其概率分布 ...
- opencv图像处理学习随笔:帮助文档运算公式中saturate的含义
☞ ░ 前往老猿Python博文目录 ░ 在opencv文档中中,加法运算的一种计算公式如下: dst(I)=saturate(src1(I)+src2(I))if mask(I)≠0 类似的公式还有 ...
- OpenCV图像处理学习二十,图像直方图均衡化原理与实现
一.图像直方图的概念 图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图.直方图反映了图像灰度的分布情况,是图像的统计学特征.图像的灰度直方 ...
- opencv图像处理学习(六十八)——肤色检测
参考链接:https://blog.csdn.net/qq_22527639/article/details/81501565. 1.肤色检测 肤色检测技术利用了计算机对人体皮肤像素的分析过程,随 ...
- python+OpenCV图像处理(六)图像平滑与滤波
图像平滑与滤波 运用它,首先就要了解它,什么是平滑滤波? 平滑滤波是低频增强的空间域滤波技术.它的目的有两类:一类是模糊:另一类是消除噪音.空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平 ...
- OpenCV图像处理学习十八,霍夫变换实现交通车道线检测
一.霍夫变换 经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆.霍夫变换运用两个坐标空间之间的变换,将在一个空间中具有相同形状的曲线或直线映射到另一个坐标 ...
最新文章
- Datawahle文化衫来了!
- Oracle怎么查外键建在哪个表上
- PHP过滤器 filter_has_var() 函数
- 所有库在门不显示封装_COB全天候通透屏,在商业显示中的场景应用
- Splitting into digits
- webbench windows_linux下的web并发测试工具汇总:ab, siege和webbench
- C学习杂记(四)sizeof计算联合体大小
- spring.net 对象创建 几种情况
- python3 Tkinter GUI 试水
- 微型计算机控制技术小论文,微型计算机控制技术结课论文..doc
- halcon教程- 边缘检测 亚像素边缘提取 轮廓提取
- 弹性系数和线径的计算公式_压缩弹簧的弹性系数计算
- java的duplicate用法_Java FloatBuffer duplicate()用法及代码示例
- android 开机自动运行程序
- LeNet-5 手写字体识别模型
- 神舟战神调节风扇热键_神舟GX9电脑热键驱动
- 如何通过安装包安装应用到手机
- 文件服务器搭建手机,自己搭建手机云服务器
- linux 原子变量
- ubuntu禁用笔记本触摸板