精华内容
下载资源
问答
  • 开发环境为QT5.8+opencv3.2,主要实现了图像点运算,包括图像反色,灰度拉伸,灰度均衡。
  • Python OpenCV实例:图像灰度拉伸

    千次阅读 2018-04-19 17:13:00
    定义:灰度拉伸,也称对比度拉伸,是一种简单的线性点运算。作用:扩展图像的 直方图,使其充满整个灰度等级范围内 公式: g(x,y) = 255 / (B - A) * [f(x,y) - A], 其中,A = min[f(x,y)],最小灰度级;B = max[f(x...
    #coding:utf-8
    '''
    灰度拉伸
    定义:灰度拉伸,也称对比度拉伸,是一种简单的线性点运算。作用:扩展图像的
          直方图,使其充满整个灰度等级范围内
    公式:
    g(x,y) = 255 / (B - A) * [f(x,y) - A],
    其中,A = min[f(x,y)],最小灰度级;B = max[f(x,y)],最大灰度级;
         f(x,y)为输入图像,g(x,y)为输出图像
    
    缺点:如果灰度图像中最小值A=0,最大值B=255,则图像没有什么改变
    
    '''
    
    import cv2
    import numpy as np
    
    def grey_scale(image):
        img_gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
        
        rows,cols = img_gray.shape
        flat_gray = img_gray.reshape((cols * rows,)).tolist()
        A = min(flat_gray)
        B = max(flat_gray)
        print('A = %d,B = %d' %(A,B))
        output = np.uint8(255 / (B - A) * (img_gray - A) + 0.5)
        return output
    
    src = cv2.imread('datas/f4.jpg')
    result = grey_scale(src)
    cv2.imshow('src',cv2.cvtColor(src,cv2.COLOR_BGR2GRAY))
    cv2.imshow('result',result)
    
    cv2.waitKey()
    cv2.destroyAllWindows()

    171256_khyh_106657.png

     

    转载于:https://my.oschina.net/wujux/blog/1797984

    展开全文
  • 本文实例为大家分享了Opencv实现图像灰度线性变换的具体代码,供大家参考,具体内容如下 通过图像灰度线性变换提高图像对比度和亮度,原图像为src,目标图像为dst,则dst(x,y) = * src(x,y) + 。 不仅对单通道...
  • 图片灰度拉伸

    2016-12-03 10:33:39
    利用opencv 实现的灰度拉伸效果 可以直接运行
  • Android Studio 依赖OpenCV3.4.1作为依赖包 进行图片灰度处理 下载就可用
  • 实验内容及实验原理:1、灰度的线性变换灰度的线性变换就是将图像中所有的点的灰度按照线性灰度变换函数进行变换。该线性灰度变换函数是一个...2、灰度拉伸灰度拉伸和灰度线性变换相似。不同之处在于它是分段线性变...

    实验内容及实验原理:

    1、灰度的线性变换

    灰度的线性变换就是将图像中所有的点的灰度按照线性灰度变换函数进行变换。该线性灰度变换函数是一个一维线性函数:f(x)=a*x+b

    其中参数a为线性函数的斜率,b为线性函数的在y轴的截距,x表示输入图像的灰度,f(x)表示输出图像的灰度。

    要求:输入一幅图像,根据输入的斜率和截距进行线性变换,并显示。

    2、灰度拉伸

    灰度拉伸和灰度线性变换相似。不同之处在于它是分段线性变换。表达式如下:


    其中,x1和x2是分段函数的转折点。

    要求:输入一幅图像,根据选择的转折点,进行灰度拉伸,显示变换后的图像。

    3、灰度直方图

    灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标表示该灰度出现的频率(象素的个数)。

    要求:输入一幅图像,显示它的灰度直方图,可以根据输入的参数(上限、下限)显示特定范围的灰度直方图。

    4、直方图均衡:要求

    1)    显示一幅图像pout.bmp的直方图;

    2)    用直方图均衡对图像pout.bmp进行增强;

    3)    显示增强后的图像。

    实验过程:

    打开原图像,创建结果图像:

    IplImage *src = cvLoadImage("pout.bmp", 1);//原图
    IplImage *dst =cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_8U, 1);

    函数说明:

    CVAPI(IplImage*)cvLoadImage( constchar* filename, intiscolorCV_DEFAULT (CV_LOAD_IMAGE_COLOR));
    
    //Iscolor的值:
    enum{
    /* 8bit, color ornot */  CV_LOAD_IMAGE_UNCHANGED  =-1,
    /* 8bit, gray */         CV_LOAD_IMAGE_GRAYSCALE  =0,
    /* ?, color */           CV_LOAD_IMAGE_COLOR      =1,
    /* any depth, ? */       CV_LOAD_IMAGE_ANYDEPTH   =2,
    /* ?, any color */       CV_LOAD_IMAGE_ANYCOLOR   =4,
    /* ?, no rotate */       CV_LOAD_IMAGE_IGNORE_ORIENTATION  =128
    };
    
    CVAPI(IplImage*)  cvCreateImage( CvSizesize, intdepth, intchannels );
    @param size Imagewidth and height
    @param depth Bitdepth of image elements. See IplImage for valid depths.
    @param channelsNumber of channels per pixel. See IplImage for details. This function onlycreates
    images withinterleaved channels.

    图像显示:

    cvNamedWindow("Image", 1);//创建窗口
    cvShowImage("Image", dst);//显示图像,在指定窗口显示制定图像
    cvWaitKey(0); //等待按键
    cvDestroyWindow("Image");//销毁窗口
    
    //函数说明
    CVAPI(int)cvNamedWindow( constchar* name, intflagsCV_DEFAULT(CV_WINDOW_AUTOSIZE) );
    Flags:
    CV_WINDOW_NORMAL   =0x00000000, //the user canresize the window (no constraint)  / alsouse to switch a fullscreen window to a normal size
    CV_WINDOW_AUTOSIZE = 0x00000001, //the user cannot resize the window, the size isconstrainted by the image displayed
    CV_WINDOW_OPENGL   =0x00001000, //window with openglsupport

    灰度线性变换

    对图像的每个像素遍历,获取原图像的灰度值,然后计算线性变换后的值,设置目标图像相应位置的灰度值

    for (int i = 0;i < src->height; i++){
         for (int j = 0; j < src->width; j++){
             CvScalar s =cvGet2D(src, i, j);
             s.val[0] = fa * s.val[0] + fb;
             cvSet2D(dst, i, j, s);
         }
    }
    
    //函数说明:
    //参数为图像指针和坐标,如果指定位置不存在则返回0
    CVAPI(CvScalar)cvGet2D( constCvArr* arr, intidx0, intidx1 );
    The functions returna specific array element. In the case of a sparse array the functions return 0
    if the requestednode does not exist (no new node is created by the functions).
    @param arr Inputarray
    @param idx0 Thefirst zero-based component of the element index
    //返回值类型:
    typedefstructCvScalar{
    double val[4];
    }

    变换前:

    变换后:

    灰度拉伸

    根据当前灰度值所处的区间进行相应的变换

    for (int i = 0;i < src->height; i++){
         for (int j = 0; j < src->width; j++){
             CvScalar s =cvGet2D(src, i, j);
             if(s.val[0] < x1)
                  s.val[0] = y1 / x1*s.val[0];
             elseif (s.val[0] <= x2)
                  s.val[0] = (y2 - y1) / (x2 -x1)*(s.val[0] - x1) + y1;
             else
                  s.val[0] = (255 - y2) / (255 -x2)*(s.val[0] - x2) + y2;
             cvSet2D(dst, i, j, s);
         }
    }

    变换前:

    变换后:

    灰度直方图

    将灰度分为256个离散的值进行统计,存放在table数组中

    for (int i = 0;i < src->height; i++){
         for (int j = 0; j < src->width; j++){
             CvScalar s =cvGet2D(src, i, j);
             table[(int)s.val[0]]++;
         }
    }
    
    //找出灰度出现次数的最大值,以对直方图进行缩放
    for (int i = 0;i < 256; i++)
         if (table[i]> max)max = table[i];
    
    //创建直方图:
    Mat histgram(256, 256, CV_8U, Scalar(255));
    
    //构造函数说明:
    /** @overload
    @param rows Numberof rows in a 2D array.
    @param cols Numberof columns in a 2D array.
    @param type Arraytype. Use CV_8UC1...CV_64FC4 to create 1-4 channel matrices, orCV_8UC(n)...CV_64FC(n) to create multi-channel (up toCV_CN_MAX channels) matrices.
    @param s An optionalvalue to initialize each matrix element with. To set all the matrix elements tothe particular value after the construction, use theassignment operator
    Mat::operator=(constScalar& value) .
    */
    Mat(introws, intcols, inttype, constScalar& s);//s是所有像素的初始化值
    
    //绘制直方图:在指定的范围内画线,线的长度为指定会的像素个数,并且缩放到255之间
    for (int i =range[0]; i <= range[1]; i++)
         line(histgram, Point(i,255), Point(i, (255 - table[i]*255/max)), Scalar(0));

    直方图:


    直方图均衡

    计算累计直方图并取整确定映射关系:

    for (int i = 1;i < 256; i++){
         s_table[i%2] = s_table[(i - 1)%2] + (float)table[i] / sum;
         new_table[i] = (int)(s_table[i%2]* 255 + 0.5);
    }

    用新值绘制新图

    均衡前:

    均衡后:

    源码:

    // opencv1.cpp: 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include<iostream>  
    #include <opencv2/core/core.hpp>  
    #include <opencv2/highgui/highgui.hpp>  
    #include <cv.h>
    //#include <highgui.h>
    #include <cxcore.h>
    #include <cvaux.h>
    #include <stdlib.h>
    #include <imgproc.hpp>
    
    using namespace cv;
    
    int main()
    {
    	IplImage *src;
    	src = cvLoadImage("pout.bmp", 1);//原图
    	IplImage *dst = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_8U, 1);
    	
    	
    	std::cout << "灰度线性变换..."<<std::endl;
    	double fa = 1.0, fb = 0.0;
    	while (fa >= 0)
    	{
    		for (int i = 0; i < src->height; i++)
    		{
    			for (int j = 0; j < src->width; j++)
    			{
    				CvScalar s = cvGet2D(src, i, j);
    				s.val[0] = fa * s.val[0] + fb;
    				cvSet2D(dst, i, j, s);
    			}
    		}
    		cvNamedWindow("Image", 1);//创建窗口
    		cvShowImage("Image", dst);//显示图像
    		cvWaitKey(0); //等待按键
    		cvDestroyWindow("Image");//销毁窗口
    
    		std::cin >> fa >> fb; 
    	}
    
    	std::cout << "灰度拉伸..."<<std::endl;
    	double x1 = 0.0, y1 = 0.0, x2 = 1.0, y2 = 1.0;
    	while (x1 >= 0)
    	{
    		for (int i = 0; i < src->height; i++)
    		{
    			for (int j = 0; j < src->width; j++)
    			{
    				CvScalar s = cvGet2D(src, i, j);
    				if (s.val[0] < x1)
    				{
    					s.val[0] = y1 / x1*s.val[0];
    				}
    				else if (s.val[0] <= x2)
    				{
    					s.val[0] = (y2 - y1) / (x2 - x1)*(s.val[0] - x1) + y1;
    				}
    				else
    				{
    					s.val[0] = (255 - y2) / (255 - x2)*(s.val[0] - x2) + y2;
    				}
    				cvSet2D(dst, i, j, s);
    			}
    		}
    		cvNamedWindow("Image", 1);//创建窗口
    		cvShowImage("Image", dst);//显示图像
    		cvWaitKey(0); //等待按键
    		cvDestroyWindow("Image");//销毁窗口
    
    		std::cin >> x1 >> y1 >> x2 >> y2;
    	}
    	
    
    	std::cout << "灰度直方图..." << std::endl;
    
    	int table[256] = { 0 };
    	int range[] = { 0, 255 };
    	std::cin >> range[0] >> range[1];
    	for (int i = 0; i < src->height; i++)
    	{
    		for (int j = 0; j < src->width; j++)
    		{
    			CvScalar s = cvGet2D(src, i, j);
    			table[(int)s.val[0]]++;
    		}
    	}
    	double max = 0;
    	int sum = 0;
    	for (int i = 0; i < 256; i++)
    	{
    		sum += table[i];
    		if (table[i] > max)max = table[i];
    		//std::cout << table[i] << std:: endl;
    	}
    	Mat histgram(256, 256, CV_8U, Scalar(255));
    	for (int i = range[0]; i <= range[1]; i++)
    	{
    		line(histgram, Point(i, 255), Point(i, (255 - table[i]*255/max)), Scalar(0));
    	}
    	namedWindow("histgram");
    	imshow("histgram", histgram);
    	waitKey(0);
    
    
    	std::cout << "灰度均衡直方图..." << std::endl;
    	int new_table[256] = { 0 };
    	float s_table[2] = { (float)table[0]/sum };
    	for (int i = 1; i < 256; i++)
    	{
    		s_table[i%2] = s_table[(i - 1)%2] + (float)table[i] / sum;
    		new_table[i] = (int)(s_table[i%2] * 255 + 0.5);
    	}
    	for (int i = 0; i < src->height; i++)
    	{
    		for (int j = 0; j < src->width; j++)
    		{
    			CvScalar s = cvGet2D(src, i, j);
    			s.val[0] =new_table[(int)s.val[0]];
    			cvSet2D(dst, i, j, s);
    		}
    	}
    
    
    	cvNamedWindow("Image", 1);//创建窗口
    	cvShowImage("Image", dst);//显示图像
    	cvWaitKey(0); //等待按键
    	cvDestroyWindow("Image");//销毁窗口
    
    
    	cvReleaseImage(&dst); //释放图像
    }
    
    

    原图:(原来是bmp格式的,但是不能上传,改成png格式了,分辨率都是256X256的)



    展开全文
  • 1、直方图均衡化 ...2、灰度拉伸  由于光线原因会造成图像局部过亮或过暗,需要对图像进行拉伸使之覆盖较大的取值区间。使亮的区域更亮,暗的区域更暗,提高图像的对比度,从而使图像边缘明显。

    1、直方图均衡化

    void cvEqualizeHist( const CvArr* src, CvArr* dst );

    用来使灰度图象直方图均衡化,可以将比较淡的图像变换为比较深的图像(即增强图像的亮度及对比度)。

    2、灰度拉伸

         由于光线原因会造成图像局部过亮或过暗,需要对图像进行拉伸使之覆盖较大的取值区间。使亮的区域更亮,暗的区域更暗,提高图像的对比度,从而使图像边缘明显。灰度拉伸是将灰度图像进行分段性变化,即若原图像f(x,y)的灰度变化区间为[a,b],变换后图像g(x,y)的灰度范围扩展到区间[c,d],可采用下列线性变换来实现:

    代码如下:

    void stretch(IplImage* src,IplImage* dst,int nMin,int nMax)
    {
    	int low_value=nMin;    //拉伸后像素的最小值 
    	int high_value=nMax;   //拉伸后像素的最大值
    
    	float rate=0;          //图像的拉伸率
    
    	float stretch_p[256],stretch_p1[256],stretch_num[256];
    	//清空三个数组,初始化填充数组元素为0
    	memset(stretch_p,0,sizeof(stretch_p));
    	memset(stretch_p1,0,sizeof(stretch_p1));
    	memset(stretch_num,0,sizeof(stretch_num));
    	//统计图像各个灰度级出现的次数
    	uchar* srcData=(uchar*)src->imageData;
    	uchar* dstData=(uchar*)dst->imageData;
    	int nHeight=src->height;
    	int nWidth=src->width;
    	int i,j;
    	uchar nVal=0;
    	for (i=0;i<nHeight;i++)
    	{
    		for (j=0;j<nWidth;j++)
    		{
    			nVal=srcData[i*nWidth+j];
    			stretch_num[nVal]++;
    		}
    	}
    	//统计各个灰度级出现的概率
    	for (i=0;i<256;i++)
    	{
    		stretch_p[i]=stretch_num[i]/(nHeight*nWidth);
    	}
    	//统计各个灰度级的概率和
    	for (i=0;i<256;i++)
    	{
    		for (j=0;j<=i;j++)
    		{
    			stretch_p1[i]+=stretch_p[j];
    		}
    	}
    	//计算两个阈值点的值
    	for (i=0;i<256;i++)
    	{
    		if (stretch_p1[i]<0.1)     //low_value取值接近于10%的总像素的灰度值
    		{
    			low_value=i;
    		}
    		if (stretch_p1[i]>0.9)     //high_value取值接近于90%的总像素的灰度值
    		{
    			high_value=i;
    			break;
    		}
    	}
    	rate=(float)255/(high_value-low_value+1);
    	//进行灰度拉伸
    	for (i=0;i<nHeight;i++)
    	{
    		for (j=0;j<nWidth;j++)
    		{
    			nVal=srcData[i*nWidth+j];
    			if (nVal<low_value)
    			{
    				dstData[i*nWidth+j]=0;
    			}
    			else if (nVal>high_value)
    			{
    				dstData[i*nWidth+j]=255;
    			}
    			else
    			{
    				dstData[i*nWidth+j]=(uchar)((nVal-low_value)*rate+0.5);
    				if (dstData[i*nWidth+j]>255)
    				{
    					dstData[i*nWidth+j]=255;
    				}
    			}
    		}
    	}
    }


     

     

     

    展开全文
  • 【图像处理】-004 图像灰度拉伸

    千次阅读 2018-12-11 13:58:45
    图像灰度拉伸 文章目录1 原理2 Matlab实现3 OpenCV实现4 效果 1 原理   图像灰度拉伸是改变图像对比度的一种方法,通过灰度映射,将原图中某一区段中的灰度值映射到另一灰度值,从而拉伸或压缩整个图像的灰度...

    图像灰度拉伸

    1 原理

      图像灰度拉伸是改变图像对比度的一种方法,通过灰度映射,将原图中某一区段中的灰度值映射到另一灰度值,从而拉伸或压缩整个图像的灰度分布范围。

    2 Matlab实现

    clc;
    clear;
    close all;
    
    % 对灰度图进行灰度线性变换
    ori_img = imread('../images/6.jpg');
    ori_img1 = rgb2gray(ori_img);
    [oriHist,oriX] = imhist(ori_img1);
    
    pt0 = [0,0];
    pt1 = [100,50];
    pt2 = [150,160];
    pt3 = [255,200];
    
    [width,height] = size( ori_img1);
    gray1 = ori_img1;
    for i=1:1:width
        for j = 1:1:height
            if (gray1(i,j)<pt1(1))
                gray1(i,j) = pt0(2) + (gray1(i,j)-pt0(1)) * ((pt1(2)-pt0(2))/(pt1(1)-pt0(1)));
            else if(gray1(i,j)>=pt1(1)&&gray1(i,j)<pt2(1))
                    gray1(i,j) = pt1(2) + (gray1(i,j)-pt1(1)) * ((pt2(2)-pt1(2))/(pt2(1)-pt1(1)));
                else
                    gray1(i,j) = pt2(2) + (gray1(i,j)-pt2(1)) * ((pt3(2)-pt2(2))/(pt3(1)-pt2(1)));
                end
            end
        end
    end
    [g1Hist,g1X] = imhist(gray1);
    figure(1),subplot(1,2,1),imshow(ori_img1),title('原图');subplot(1,2,2),imshow(gray1),title('灰度线性拉伸');
    figure(2),subplot(1,2,1),stem(oriX,oriHist),title('原图直方图');subplot(1,2,2),stem(g1X,g1Hist),title('灰度线性拉伸直方图');
    
    

    3 OpenCV实现

    //
    int cvPointCmp(cv::Point& a, cv::Point& b)
    {
    	return a.x < b.x;
    }
    
    //根据控制点,生成灰度拉伸所使用的查找表
    void CreateLSLUT(std::vector<cv::Point>& pts, cv::Mat& lut)
    {
    	if (pts.size() == 0)
    		return;
    	//在控制点前增加(0,0)点,末尾增加(255,255)点
    	std::vector<cv::Point> npts(1, cv::Point(0, 0));
    	npts.insert(npts.end(), pts.begin(), pts.end());
    	npts.push_back(cv::Point(255, 255));
        //根据点的X坐标排序
    	std::sort(npts.begin(), npts.end(), cvPointCmp);
    
    	lut = cv::Mat(1, 256, CV_8UC1);
    	int nLoc = 0;
    	for (int i = 0; i < 256; i++)
    	{
    		for (int j = nLoc; j < npts.size()-1; j++)
    		{
                //找出i所对应的区间的端点,左闭右开区间
    			if (npts[j].x <= i && npts[j+1].x > i)
    			{
    				nLoc = j;
    				float y = npts[j].y + 1.0*(npts[j + 1].y - npts[j].y) / (npts[j + 1].x - npts[j].x)*(i - npts[j].x);
    				if (y < 0)
    					y = 0;
    				if (y > 255)
    					y = 255;
    				lut.at<uchar>(i) = (uchar)y;
    				break;
    			}
    		}
    	}
    }
    
    
    #include "../include/baseOps.h"
    #include <iostream>
    #include <string>
    #include "../include/opencv400/opencv2/opencv.hpp"
    #include "windows.h"
    
    
    int main()
    {
    	SetCurrentDirectoryToExePath();
    
    	cv::Mat ori_img = cv::imread("../images/6.jpg");
    	cv::Mat gray_img;
    	cv::cvtColor(ori_img, gray_img, cv::COLOR_BGR2GRAY);
    	cv::namedWindow("灰度图");
    	cv::imshow("灰度图", gray_img);
    
    	cv::Mat grayHist;
    	calcHist1D(gray_img, grayHist);
    	cv::imshow("hist", grayHist);
    
        //确定控制点
    	std::vector<cv::Point> pts;
    	pts.push_back(cv::Point(50, 100));
    	pts.push_back(cv::Point(100, 80));
    	pts.push_back(cv::Point(80, 120));
    	pts.push_back(cv::Point(250, 80));
    	
        //生成灰度映射表
        cv::Mat lut;
    	CreateLSLUT(pts, lut);
    	
        //查表操作
    	cv::Mat res;
    	cv::LUT(gray_img, lut, res);
    
    	cv::Mat g1Hist;
    	calcHist1D(res, g1Hist);
    	cv::imshow("g1", res);
    	cv::imshow("g1Hist", g1Hist);
    
    
    	cv::waitKey();
    	return 0;
    }
    

    4 效果

    在这里插入图片描述在这里插入图片描述

    展开全文
  • Python_OpenCV_灰度拉伸

    2021-03-17 09:17:41
    灰度拉伸 output=255/(B-A)*[img_gray-A] 其中,A为最小灰度级,B为最大灰度级 img_gray为输入图像,output为输出图像 缺点:若图像中最小灰度值=0,最大灰度值=255,则图像不会有什么改变 ''' import cv2 ...
  • Gamma校正是一种重要的非线性变换,其是对输入图像灰度值进行指数变换,进而校正亮度偏差,通常应用于扩展暗调的细节。一般情况下,当Gamma校正的值大于1时,图像的高光部分被压缩而暗调部分被扩展;当Gamma矫正小于...
  • OpenCV图像增强之对比度拉伸 C++

    千次阅读 2019-02-19 17:51:22
    下图是典型的对比度拉伸变换。点(r1,s1)和(r2,s2)的位置控制变换函数的形状。 如果r1=r2,s1=s2,则变换为一线性函数; 若r1=r2,s1=0且s2=L-1,则是阈值处理函数,产生一幅二值图像; 处理一幅8bit低对比度图像,(r1,...
  • 【Python3+OpenCV】实现图像处理—灰度变换篇

    千次阅读 多人点赞 2020-04-20 20:41:15
    本篇推文共计1000个字,阅读时间约3分钟。OpenCV是一个C++库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块。在Python中常...
  • 图像灰度变换的有以下作用: 改善图像的质量,使图像能够显示更多的细节,提高图像的对比度(对比度拉伸) 有选择的突出图像感兴趣的特征或者抑制图像中不需要的特征 可以有效的改变图像的直方图分布,使像素的分布...
  • QT+opencv图像处理

    2017-09-14 09:20:53
    使用QT做界面下的采用opencv库编的图像处理软件,对于刚入门视觉学习,图像处理的人应该很有帮助,功能也比较全面,对于图像的基本处理都集成了,也可以根据自己需求添加相应功能;opencv为2.4.9其他版本的话可以...
  • 图像灰度变换的有以下作用: 改善图像的质量,使图像能够显示更多的细节,提高图像的对比度(对比度拉伸) 有选择的突出图像感兴趣的特征或者抑制图像中不需要的特征 可以有效的改变图像的直方图分...
  • 开发环境为QT5.8+opencv3.2,主要实现了图像几何变换,包括图像平移,图像旋转,图像缩放。
  • python中opencv图像处理实验(一)---灰度变换

    万次阅读 多人点赞 2018-05-03 16:26:17
    本篇则记录对灰度图像进行一些常规处理。一张图片是由像素点矩阵构成,我们对图片进行操作即为对图片的像素点矩阵进行操作。我们只要在这个像素点矩阵中找到这个像素点的位置,比如第x行,第y列,所以这个像素点在这...
  • 在数字图像处理中常用的灰度化方法主要包括:分量法、加权平均值和最大值法。一般认为三种方法并无优劣之分,在不同情况下增加一些尝试方法,兴许会有不用效果。 以下主要介绍灰度化和灰度变换: 灰度化 import cv2 ...
  • 在进行图像操作时,为加快图像的处理速度,往往需要对图像的局部进行操作,一般是设置ROI区域,然后对ROI区域进行二值化,在对灰度图进行特征的检测与提取。此方法可以大大加快图像处理的速度。本博文结合opencv进行...
  • 比如直方图太窄,说明图像使用的灰度值范围太窄;比如直方图有一个很强烈的峰值,说明图像部分灰度值的使用频率比其他强度值要高得多。 所以,可以通过直方图信息来修改图像灰度值。如果将一种灰度修改为另一种...
  • 这样的图像直方图灰度往往都集中在某一色阶范围之内,我们需要将这些灰度拉伸到整个灰度级上,并使它们在直方图中均匀的分布,以达到增强图像的目的,这样我们就引入了图片的均衡化,以达到亮度的均衡化。...
  • 精通系列\精通Visual C++数字图像处理技术与工程案例\chap01\灰度拉伸.rar
  • opencv-灰度图像归一化到0~255

    千次阅读 2020-04-16 11:49:46
    opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> cv::Mat contrastStretch(cv::Mat ...
  • opencv中的灰度变换

    千次阅读 2018-07-13 14:13:54
    本文介绍的图像的灰度变换则不同,其对像素的计算仅仅依赖于当前像素...图像灰度变换的有以下作用:改善图像的质量,使图像能够显示更多的细节,提高图像的对比度(对比度拉伸)有选择的突出图像感兴趣的特征或者抑...
  • 基于opencv1.0 VC++6.0MFC写的完整的图像处理程序,功能齐全(图像基本操作:旋转、镜像、反色、图像二值化、图像分割、图像增强、灰度直方图均衡、线性变换、灰度拉伸)、边缘检测(prewitt算子、sobel算子、canny...
  • 这段程序是对灰度图像进行非线性拉伸,即讲灰度图像灰度分段,分为三段,低灰度级,中灰度级,高灰度级,把三段灰度级进行灰度压缩,使得亮的地方更亮,暗的地方更暗,这样可以增加灰度的对比度,便于目标跟踪。
  • 直方图均衡 大多数自然图像,其灰度分布集中在较窄的区间,引起图像细节不够清晰,采用直方图修正后可使图像灰度间距拉开或使灰度分布均匀,从而增大反差,使图像细节清晰,达到增强的目的。例如一幅过曝光的图片...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,647
精华内容 658
关键字:

opencv图像灰度拉伸