void ImagePro::on_btnHistoStretch_clicked() { cv::Mat tepImg; std::vector<cv::Mat> tmp; cv::split(_img,tmp); Histogram1D HH; for (int i=0;i<3;i++){ tmp[i]=HH.stretch(tmp[i]); } cv::merge(tmp,tepImg); cv::namedWindow("stretch histogram"); cv::imshow("stretch histogram",tepImg); }
cv::Mat ImageProcessor::simplifyImage(cv::Mat &origImage, int blurWindow, int stretchMinVal, int equalize) { cv::Mat improvImage; Histogram1D h; if(origImage.type() != 0) cv::cvtColor( origImage, improvImage, CV_BGR2GRAY ); else origImage.copyTo(improvImage); if (equalize) { cv::equalizeHist(improvImage, improvImage); } else { improvImage = h.stretch(improvImage, stretchMinVal); } if(blurWindow > 0) cv::medianBlur(improvImage, improvImage, blurWindow); return improvImage; }
int main() { // Read input image cv::Mat image= cv::imread("group.jpg",0); if (!image.data) return 0; // Resize by 70% for book printing cv::resize(image, image, cv::Size(), 0.7, 0.7); // save grayscale image cv::imwrite("groupBW.jpg", image); // Display the image cv::namedWindow("Image"); cv::imshow("Image",image); // The histogram object Histogram1D h; // Compute the histogram cv::Mat histo= h.getHistogram(image); // Loop over each bin for (int i=0; i<256; i++) cout << "Value " << i << " = " << histo.at<float>(i) << endl; // Display a histogram as an image cv::namedWindow("Histogram"); cv::imshow("Histogram",h.getHistogramImage(image)); // creating a binary image by thresholding at the valley cv::Mat thresholded; // output binary image cv::threshold(image,thresholded, 60, // threshold value 255, // value assigned to pixels over threshold value cv::THRESH_BINARY); // thresholding type // Display the thresholded image cv::namedWindow("Binary Image"); cv::imshow("Binary Image",thresholded); thresholded = 255 - thresholded; cv::imwrite("binary.bmp",thresholded); // Equalize the image cv::Mat eq= h.equalize(image); // Show the result cv::namedWindow("Equalized Image"); cv::imshow("Equalized Image",eq); // Show the new histogram cv::namedWindow("Equalized Histogram"); cv::imshow("Equalized Histogram",h.getHistogramImage(eq)); // Stretch the image, setting the 1% of pixels at black and 1% at white cv::Mat str= h.stretch(image,0.01f); // Show the result cv::namedWindow("Stretched Image"); cv::imshow("Stretched Image",str); // Show the new histogram cv::namedWindow("Stretched Histogram"); cv::imshow("Stretched Histogram",h.getHistogramImage(str)); // Create an image inversion table int dim(256); cv::Mat lut(1, // 1 dimension &dim, // 256 entries CV_8U); // uchar // or cv::Mat lut(256,1,CV_8U); for (int i=0; i<256; i++) { lut.at<uchar>(i)= 255-i; } // Apply lookup and display negative image cv::namedWindow("Negative image"); cv::imshow("Negative image",h.applyLookUp(image,lut)); cv::waitKey(); return 0; }
int main_his() { // Read input image cv::Mat image= cv::imread("Koala.jpg",0); if (!image.data) return 0; // Display the image cv::namedWindow("Image"); cv::imshow("Image",image); // The histogram object Histogram1D h; // Compute the histogram cv::MatND histo= h.getHistogram(image); // Loop over each bin for (int i=0; i<256; i++) cout << "Value " << i << " = " << histo.at<float>(i) << endl; // Display a histogram as an image cv::namedWindow("Histogram"); cv::imshow("Histogram",h.getHistogramImage(image)); // creating a binary image by thresholding at the valley cv::Mat thresholded; cv::threshold(image,thresholded,60,255,cv::THRESH_BINARY); // Display the thresholded image cv::namedWindow("Binary Image"); cv::imshow("Binary Image",thresholded); cv::imwrite("binary.bmp",thresholded); // Equalize the image cv::Mat eq= h.equalize(image); // Show the result cv::namedWindow("Equalized Image"); cv::imshow("Equalized Image",eq); // Show the new histogram cv::namedWindow("Equalized Histogram"); cv::imshow("Equalized Histogram",h.getHistogramImage(eq)); // Stretch the image ignoring bins with less than 5 pixels cv::Mat str= h.stretch(image,5); // Show the result cv::namedWindow("Stretched Image"); cv::imshow("Stretched Image",str); // Show the new histogram cv::namedWindow("Stretched Histogram"); cv::imshow("Stretched Histogram",h.getHistogramImage(str)); // Create an image inversion table //uchar lookup[256]; // Create lookup table int dims[1]={256}; cv::MatND lookup(1,dims,CV_8U); for (int i=0; i<256; i++) { lookup.at<uchar>(i)=255-i; } // Apply lookup and display negative image cv::namedWindow("Negative image"); cv::imshow("Negative image",h.applyLookUp(image,lookup)); cv::waitKey(); return 0; }