zoukankan      html  css  js  c++  java
  • OpenCV学习笔记(四) Mat的简单操作

    转自:OpenCV Tutorial: core 模块. 核心功能

    改变图像对比度和亮度:convertTo

    可以把 f(x) 看成源图像像素,把 g(x) 看成输出图像像素。这样一来,调整亮度和对比度的方法可表示为:g(i,j) = alpha cdot f(i,j) + eta

    两个参数 alpha > 0 和 eta 一般称作 增益 和 偏置 参数。我们往往用这两个参数来分别控制 对比度 和 亮度 。

    OpenCV很多函数都使用到这两个参数(如addWeighted也有这两个参数),这里可直接使用convertTo函数执行:

    original_image.convertTo(new_image, -1, alpha, beta);
    

    取参数 alpha = 2.2 和 eta = 50:

    对两幅图求和:addWeighted

    公式为:dst = alpha cdot src1 + eta cdot src2 + gamma

    addWeighted( src1, alpha, src2, beta, gamma, dst);
    

    alpha=0.7, beta=0.4:

    单通道操作:split与merge

    利用split可将多通道的Mat转化为一个vector对象,每个分量是原Mat的一个通道。

    Mat image1=imread("image.jpg"), image2=imread("image2.jpg", 0), dest;
    vector<Mat> planes;
    split(image1, planes);
    planes[2]+=image2;
    merge(planes, dest);
    

    绘图:Point与Scalar

    Point数据结构表示了由其图像坐标 x 和 y 指定的2D点。Scalar表示具有4个元素的数组,此类型在OpenCV中被大量用于传递像素值,如果用不到第四个参数,则无需定义。

    OpenCV中左上角为(0,0),向右x增大,向下y增大。

    // point 1
    Point pt;
    pt.x = 10;
    pt.y = 8;
    // point 2
    Point pt =  Point(10, 8);
    
    //Scalar
    Scalar s = Scalar( a, b, c );

    查看OpenCV中以下函数的定义:line, ellipse, circle, fillPoly, polylines, rectangle, putText

    基本上用Point定位,再用Scalar选择颜色即可。

    随机数生成器

    RNG rng( 0xFFFFFFFF );  //初始化
    Point pt1;
    pt1.x = rng.uniform( x_1, x_2 );  //产生[x_1, y_1)范围的随机数
    pt1.y = rng.uniform( y_1, y_2 );
    int icolor = (unsigned) rng; 

    几种简单的表示方法

    // c[i]= a[i]+b[i];
    cv::add(imageA,imageB,resultC); 
    // c[i]= a[i]+k;
    cv::add(imageA,cv::Scalar(k),resultC); 
    // c[i]= k1*a[1]+k2*b[i]+k3; 
    cv::addWeighted(imageA,k1,imageB,k2,k3,resultC);
    // c[i]= k*a[1]+b[i]; 
    cv::scaleAdd(imageA,k,imageB,resultC);
    // if (mask[i]) c[i]= a[i]+b[i]; mask必须是1-channel
    cv::add(imageA,imageB,resultC,mask);

    cv::saturate_cast<uchar>(aNumber)  如果aNumber小于0或着大于255,返回0或者255;如果aNumber是浮点数,返回最接近的整数。

    作用在两张图片上的方法:

    cv::subtract, cv::absdiff, cv::multiply, cv::divide, cv::bitwise_and, cv::bitwise_or, cv::bitwise_xor, cv::bitwise_not, cv::min, cv::max

    作用在一张图片上的方法:

    cv::sqrt, cv::pow, cv::abs, cv::cuberoot, cv::exp, cv::log.

    被重载的方法:

    the bitwise operators &,|, ^, ~, the min, max, and absfunctions, the comparison operators <, <=, ==,!=, >, >=; these later returning a 8-bit binary image. You will also find the matrix multiplication m1*m2(where m1and m2are both cv::Matinstances), matrix inversion m1.inv(), transpose m1.t(), determinant m1.determinant(), vector norm, v1.norm(), cross-product v1.cross(v2), dot product v1.dot(v2), and so on.

  • 相关阅读:
    GSON -JSON 反序列化-多节点名称支持
    Jedis 分片原理
    闭锁-CountDownLatch
    XML序列化及反序列化
    用GIT操作SVN
    报表worker-CPU使用率过高原因排查
    二.PlantUML 之活动图
    一.PlantUML 与 IDEA 集成
    ArrayList
    VI常用命令
  • 原文地址:https://www.cnblogs.com/ericxing/p/3576801.html
Copyright © 2011-2022 走看看