首页 > 其他 > 详细

OpenCV --- 修改图像的对比度、亮度 、RGB转Gray图像、修改图像的尺寸

时间:2021-02-10 13:01:17      阅读:20      评论:0      收藏:0      [点我收藏+]

转自:https://blog.csdn.net/qq_32285693/article/details/89034916

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
 
// 计时函数
void PrintMs(const char *text = "")
{
    static long long last = 0;
    long long cur = getTickCount();
    if (last == 0)
    {
        last = cur;
        return;
    }
    long long ms = 0;
    ms = ((double)(cur - last) / getTickFrequency()) * 1000;
    if (*text != 0)
    {
        printf("%s = %dms\n", text,ms);
    }
    last = getTickCount();
}
 
// RGB图像转Gray图像
void RGBToGray(Mat &src, Mat &des)
{
    // GRay = (R*30 + G*59 + B*11 +50)/100
    des.create(src.rows,src.cols,CV_8UC1);
    for (int r = 0; r < src.rows; r++)
    {
        for (int c = 0; c < src.cols; c++)
        {
            Vec3b &m = src.at<Vec3b>(r, c);
            int gray = (m[2] * 30 + m[1] * 59 + m[0] * 11 + 50) / 100;
            des.at<uchar>(r, c) = gray;
        }
    }
}
 
/改变图像的对比度和亮度/
///@para a float 对比度 1.0~3.0
///@para b int 亮度 0~100
void ChangeGain(Mat &src, Mat &des, float a, int b)
{
    //g(r,c) = a*f(r,c) + b
    des.create(src.rows, src.cols, src.type());
    for (int r = 0; r < src.rows; r++)
    {
        for (int c = 0; c < src.cols; c++)
        {
            for (int i = 0; i < 3; i++)
            {
                des.at<Vec3b>(r, c)[i] = saturate_cast<uchar>(a * src.at<Vec3b>(r, c)[i] + b);
            }
        }
    }
}
 
// 改变图像的尺寸
void xresize(Mat &src, Mat &des, Size size)
{
    des.create(size, src.type());
    //映射的原图坐标
    int sx, sy = 0;
    float fx = (float)src.cols / des.cols;
    float fy = (float)src.rows / des.rows;
    for (int x = 0; x < des.cols; x++)
    {
        sx = fx * x + 0.5;
        for (int y = 0; y <des.rows; y++)
        {
            sy = fy * y + 0.5;
            des.at<Vec3b>(y, x) = src.at<Vec3b>(sy, sx);
        }
    }
 
}
 
int main(int argc, char *argv[])
{
    Mat src = imread("1.png");
    src.create(3000, 4000, CV_8UC3);
    Mat gray;
    PrintMs("");
    cvtColor(src, gray, COLOR_BGR2GRAY);
    PrintMs("cvtColor1");
 
    cvtColor(src, gray, COLOR_BGR2GRAY);
    PrintMs("cvtColor2");
    Mat mygray;
    RGBToGray(src, mygray);
    PrintMs("RGBToGray");
 
    namedWindow("src");
    namedWindow("gray");
    namedWindow("mygray");
 
    imshow("src", src);
    imshow("gray", gray);
    imshow("mygray", mygray);
 
    waitKey(0);
 
 
    return 0;
}

OpenCV --- 修改图像的对比度、亮度 、RGB转Gray图像、修改图像的尺寸

原文:https://www.cnblogs.com/changbaishan/p/14394972.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!