功率校正
Gamma Correction with pow
本文关键字:功率 更新时间:2023-10-16
我会对图像使用伽马校正。因此,我必须将源图像的每个像素强度赋值为G = 0.6。我有问题,因为目的地图像是完全错误的。也许当我从源图像中提取像素时,我有一个投射问题。下面是我的代码:
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main() {
Mat src = imread("spine1.jpeg");
Mat dst = Mat(src.rows, src.cols, CV_8UC1);
cvtColor(src, src, CV_8UC1);
dst = Scalar(0);
for (int x = 0; x < src.rows; x++) {
for (int y = 0; y < src.cols; y++) {
int pixelValue = (int)src.at<uchar>(x, y);
dst.at<uchar>(x, y) = pow(pixelValue, 0.6);
}
}
namedWindow("Input", CV_WINDOW_AUTOSIZE);
namedWindow("Output", CV_WINDOW_AUTOSIZE);
imshow("Input", src);
imshow("Output", dst);
waitKey(0);
return 0;
}
编辑:change cvtColor(src, src, CV_8UC1);
in cvtColor(src, src, COLOR_BGR2GRAY);
呼叫cvtColor
错误。你应该使用:
cvtColor(src, src, COLOR_BGR2GRAY);
同样,你可以使你的代码更简单,更不容易出错:
#include <opencv2/opencv.hpp>
int main()
{
// Load the image as grayscale
cv::Mat1b src = cv::imread("path_to_img", cv::IMREAD_GRAYSCALE);
// Convert to double for "pow"
cv::Mat1d dsrc;
src.convertTo(dsrc, CV_64F);
// Compute the "pow"
cv::Mat1d ddst;
cv::pow(dsrc, 0.6, ddst);
// Convert back to uchar
cv::Mat1b dst;
ddst.convertTo(dst, CV_8U);
// Show results
imshow("SRC", src);
imshow("DST", dst);
waitKey();
return 0;
}
相关文章:
- 如何编写计算功率的循环
- 2分频浮动功率的优化
- 2 接 x86_64 的快速浮点功率
- 定点功率功能
- 意外输出:矢量矢量(功率集)
- 如何衡量代码更改的功率效率提高或减少
- 计算矩阵的第n个功率
- FFTW 的功率谱不起作用,但在 MATLAB 中确实如此
- 算法寻找功率,即n^p
- 如何将音频与功率谱同步并选择帧长度 N(执行 fft)
- GMP- 无模功率
- 我该怎么做 - 就像一个速度 的功率快速的功率一样快速的两个功率
- 找到最大.任何给定数字的功率值小于另一个给定数字
- 计算"power of 2"数字使用的功率的最快方法?
- 创建算法以确定功率集中的子集的大小
- 如何获得粉红噪声的每倍频程功率(使用Aquila DSP库)
- 在C++中功率非常大
- 取模操作是否更快,功率为 2,即使在编译时该值未知
- 使用套接字发送 POST 请求,但占用大量内存功率
- 由位生成的功率集