OpenCV学习笔记5 OpenCV核心模块与核心功能Core Module & Core Functionality(四)

来源:互联网 发布:手机淘宝订单号查询 编辑:程序博客网 时间:2024/05/29 19:23

一边学习一边写了两天博客,发现效率太低,一方面是英文在理解上不如中文顺畅,一方面CSDN博客发布页的编辑器用起来比较麻烦,导致进度缓慢。后面只写重点内容,仅作笔记之用。


2.5 改变图像的对比度和亮度

直接上代码。
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <iostream>using namespace std;using namespace cv;double alpha; /**< 控制对比度 */int beta;  /**< 控制亮度 */int main( int argc, char** argv ){    /// 读入用户提供的图像    Mat image = imread( argv[1] );    Mat new_image = Mat::zeros( image.size(), image.type() );    /// 初始化    cout << " Basic Linear Transforms " << endl;    cout << "-------------------------" << endl;    cout << "* Enter the alpha value [1.0-3.0]: ";    cin >> alpha;    cout << "* Enter the beta value [0-100]: ";    cin >> beta;    /// 执行运算 new_image(i,j) = alpha*image(i,j) + beta    for( int y = 0; y < image.rows; y++ )    {        for( int x = 0; x < image.cols; x++ )        {            for( int c = 0; c < 3; c++ )<pre name="code" class="cpp"><span style="white-space:pre"></span>// 计算的结果可能越界,使用 saturate_cast<unchar> 保证结果在uchar所能表达的范围内
{ new_image.at<Vec3b>(y,x)[c] = saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta ); } } } /// 创建窗口 namedWindow("Original Image", 1); namedWindow("New Image", 1); /// 显示图像 imshow("Original Image", image); imshow("New Image", new_image); /// 等待用户按键 waitKey(); return 0;}


也可以使用 convertTo() 函数实现相同效果,用法如下:
image.convertTo(new_image, -1, alpha, beta);
该函数执行的运算就是 new_image = alpha * image + beta


2.6 基本绘图

两个数据结构: Point  和 Scalar
Point 表示一个二维点,以x 和 y 表示在图像中的坐标。用法如下:
Point pt;pt.x = 10;pt.y = 8;// 或者:Point pt =  Point(10, 8);

Scalar 表示一个4元素的vector,在OpenCV中被大量用于传递像素值。有点类似于STL map容器中的 make_pair 。
RGB有三个参数,用不到第四个则不用定义。
Scalar( a, b, c )
颜色顺序,a = Red, b = Green, c = Blue 。

line() 函数:用于画直线,可通过参数设定画线的目标图像,直线的起点和终点,线的颜色,粗细和联通类型。
ellipse() 函数:用于画椭圆,可通过参数设定目标图像,椭圆中心,大小(位于矩形内),旋转角度,扩展的弧度,颜色,线粗。
circle() 函数:用于画圆,可通过参数设定目标图像,圆心,半径,颜色,线粗。
fillPoly() 函数:用于填充多边形,可通过参数设定目标图像,多边形顶点集,多边形顶点数目,多边形数量,颜色,边界线类型。
rectangle() 函数:用于画矩形,可通过参数设定目标图像,矩形两个对角顶点坐标,颜色,线粗。


2.7 随机数发生器&绘制文字

教程以一个随机绘图程序为例展开讲述。源代码l路径 opencv\source\samples\drawing.cpp 。
随机数发生器
RNG rng(0xFFFFFFFF);
rng是用数值0xFFFFFFFF来实例化的一个RNG对象。
rng.uniform(a, b); 返回一个在a和b之间的均匀分布的随机值(包含a不包含b)。

绘制文字:
 putText(image, "Testing text rendering", org, rng.uniform(0,8),                rng.uniform(0,100)*0.05+0.1, randomColor(rng), rng.uniform(1, 10), lineType);
在image上绘制文字“Tesing text rendering”
文字左下角由Point对象org定位
字体参数用 [0,8) 之间的随机整数定义
字体缩放比例为 rng.uniform(0,100)*0.05+0.1
字体颜色随机 randomColor(rng)
字体粗细随机范围 [1,10)






0 0
原创粉丝点击