我想权衡亮度值。
示例:我有一个亮度值向量:
vector <int> lum {50,100,150,200,250);
我有一个系数向量:
vector <float> coef {5.1 , 2.55 , 1.7 , 1.275, 1.02 }
我创建一个空图像:
Mat1 m(15):
因此,我的第一个亮度值为 50 (lum[0]=50),我希望将其应用于矩阵的 5.1 (coef[0]=5.1) 第一个像素。为此,我需要用第一个和第二个亮度值对第 6 个像素进行加权。在我的情况下,我的第 6 个像素的亮度将为 95,因为 (0.1*50)+ (0.9*100)=95
目前,对于第二个系数 (coef[1]=2.55),我在 2.55 上使用了 0.9 来进行前面的计算。在这个系数上它仍然是 1,65,所以第 7 个像素的亮度为 100,第 8 个像素的亮度为 (0.65*100)+ (0.35*150) = 117,5。
等等...
其实我有这个:
//Blibliothèque Opencv
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
// cpp include
#include <iostream>
#include <cmath>
#include <math.h>
#include <string.h>
#include <vector>
#include <opencv2/opencv.hpp>
#define MPI 3.14159265358979323846264338327950288419716939937510
#define RAD2DEG (180./MPI)
using namespace cv;
using namespace std;
vector <int> lum{ 50, 100, 150, 200, 250 };
vector <float> coef (5,0);
vector <int> newv(15, 0);
float pixelRef = 255, angle = 0, coeff = 0;
int main()
{
for (int n = 0; n < lum.size(); ++n)
{
//get angle
angle = ((acos(lum[n] / pixelRef)));
cout << "angle :" << angle*RAD2DEG << endl;
// get coefficient
coef [n] = (1 / (cos(angle)));
cout << "coeff :" << coef [n] << endl;
// try to weighted my pixels
newv[n] = (coef*lum[n]) + ((1 - coeff)*lum[n + 1]);
}
return 0;
}