Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;拉伸均衡图像_C++_Opencv_Histogram_Stretching - Fatal编程技术网

C++ C++;拉伸均衡图像

C++ C++;拉伸均衡图像,c++,opencv,histogram,stretching,C++,Opencv,Histogram,Stretching,从一个(2)均衡的图像,我必须创建一个(3) 原始图像: 均衡图像: 均衡和拉伸图像: 使用OpenCV,我可以使用equalizeHist()来进行均衡和拉伸 因此,如果不使用OPENCV,如何从均衡图像进行拉伸。均衡部分如下所述 #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <open

从一个(2)均衡的图像,我必须创建一个(3)

  • 原始图像:
  • 均衡图像:
  • 均衡和拉伸图像:
  • 使用OpenCV,我可以使用equalizeHist()来进行均衡和拉伸

    因此,如果不使用OPENCV,如何从均衡图像进行拉伸。均衡部分如下所述

    #include <iostream>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv/highgui.h>
    #include <cstring>
    using std::cout;
    using std::cin;
    using std::endl;
    
    using namespace cv;
    
    void imhist(Mat image, int histogram[])
    {
    
        // initialize all intensity values to 0
        for (int i = 0; i < 256; i++)
        {
            histogram[i] = 0;
        }
    
        // calculate the no of pixels for each intensity values
        for (int y = 0; y < image.rows; y++)
            for (int x = 0; x < image.cols; x++)
                histogram[(int)image.at<uchar>(y, x)]++;
    
    }
    
    void cumhist(int histogram[], int cumhistogram[])
    {
        cumhistogram[0] = histogram[0];
    
        for (int i = 1; i < 256; i++)
        {
            cumhistogram[i] = histogram[i] + cumhistogram[i - 1];
        }
    }
    
    int main()
    {
        // Load the image
        Mat image = imread("y1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    
        // Generate the histogram
        int histogram[256];
        imhist(image, histogram);
    
    
        // Caluculate the size of image
        int size = image.rows * image.cols;
        float alpha = 255.0 / size;
    
        // Calculate the probability of each intensity
        float PrRk[256];
        for (int i = 0; i < 256; i++)
        {
            PrRk[i] = (double)histogram[i] / size;
        }
    
        // Generate cumulative frequency histogram
        int cumhistogram[256];
        cumhist(histogram, cumhistogram);
    
        // Scale the histogram
        int Sk[256];
        for (int i = 0; i < 256; i++)
        {
            Sk[i] = cvRound((double)cumhistogram[i] * alpha);
        }
    
        // Generate the equlized image
        Mat new_image = image.clone();
    
        for (int y = 0; y < image.rows; y++)
            for (int x = 0; x < image.cols; x++)
                new_image.at<uchar>(y, x) = saturate_cast<uchar>(Sk[image.at<uchar>(y, x)]);
        //////////////////////////////////////////
    
        // // Generate the histogram stretched image
        Mat str_image = new_image.clone();
    
        //for (int a = 0; a < str_image.rows; a++)
        //  for (int b = 0; b < str_image.cols; b++)
    
        // Display the original Image
        namedWindow("Original Image");
        imshow("Original Image", image);
    
        // Display equilized image
        namedWindow("Equalized Image");
        imshow("Equalized Image", new_image);
    
    
        waitKey();
        return 0;
    }
    
    #包括
    #包括
    #包括
    #包括
    #包括
    使用std::cout;
    使用std::cin;
    使用std::endl;
    使用名称空间cv;
    无效imhist(Mat图像,整数直方图[])
    {
    //将所有强度值初始化为0
    对于(int i=0;i<256;i++)
    {
    直方图[i]=0;
    }
    //计算每个强度值的像素数
    对于(int y=0;y
    通常的方法是找到最暗的像素和最亮的像素。您可以在单个循环中对所有像素进行迭代,伪代码如下:

    darkest=pixel[0,0]   // assume first pixel is darkest for now, and overwrite later
    brightest=pixel[0,0] // assume first pixel is lightest for now, and overwrite later
    for all pixels
        if this pixel < darkest
           darkest = this pixel
        else if this pixel > brightest
           brightest = this pixel
        endif
    end for
    

    不要故意破坏你的问题。
    for all pixels
       newvalue = int((current value - darkest)*255/(brightest-darkest))
    end for