C++ 伽马波校正

C++ 伽马波校正,c++,opencv,opencv3.0,opencv3.1,C++,Opencv,Opencv3.0,Opencv3.1,我会对图像进行伽马校正。 所以,我必须用G=0.6对源图像的每个像素强度进行pow。 我有问题,因为目标图像是完全错误的。 当我从源图像中提取像素时,可能我有铸造问题。 这是我的代码: #include <opencv2/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <opencv2/imgproc/imgproc.hpp> using

我会对图像进行伽马校正。 所以,我必须用G=0.6对源图像的每个像素强度进行pow。 我有问题,因为目标图像是完全错误的。 当我从源图像中提取像素时,可能我有铸造问题。 这是我的代码:

#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;
}
#包括
#包括
#包括
#包括
使用名称空间cv;
使用名称空间std;
int main(){
Mat src=imread(“spine1.jpeg”);
Mat dst=Mat(src.rows、src.cols、CV_8UC1);
CVT颜色(src、src、CV_8UC1);
dst=标量(0);
对于(int x=0;x

编辑:更改CVT颜色(src、src、CV_8UC1)
CVT颜色(src,src,颜色为灰色)

调用
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;
}
#包括
int main()
{
//将图像加载为灰度
cv::Mat1b src=cv::imread(“路径到img”,cv::imread\U灰度);
//将“pow”转换为双精度
cv::Mat1d dsrc;
src.convertTo(dsrc,CV_64F);
//计算“功率”
cv::Mat1d ddst;
cv::pow(dsrc,0.6,ddst);
//转换回uchar
cv::Mat1b dst;
ddst.转换器(dst,CV_8U);
//显示结果
imshow(“SRC”,SRC);
imshow(“DST”,DST);
waitKey();
返回0;
}

此代码中没有使用
pow
。。。你到底想在这里做什么?顺便说一句,
cvtColor
是错误的<代码>CVT颜色(src,src,颜色为灰色)