加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

OpenCV 借助滚动条调整图像亮度

发布时间:2021-11-23 18:03:50 所属栏目:教程 来源:互联网
导读:OpenCV 利用滚动条调整图像亮度: /************************************************************************/ /* 亮度调整 */ /************************************************************************/ IplImage*transimg,*srcimg; int bright2adj;

OpenCV 利用滚动条调整图像亮度:
 
/************************************************************************/  
/* 亮度调整                                              */  
/************************************************************************/  
  
IplImage*transimg,*srcimg;  
int bright2adj;  
  
void re_adjust_bright(int)  
{  
    assert(srcimg != NULL);  
    assert(transimg != NULL);  
    int x,y,i;  
    if(srcimg->nChannels==3)  
    {  
        for (i = 0; i < 3; i++)//彩色图像需要处理3个通道,灰度图像这里可以删掉   
            for (y = 0; y < srcimg->height; y++)  
                for (x = 0; x < srcimg->width; x++)  
                {  
                    float val = ((uchar*)(srcimg->imageData + srcimg->widthStep*y))[x*3+i];  
                    val+=bright2adj;  
                    if(val<0)    val=0;  
                    else if(val>255) val=255;  
                    ((uchar*)(transimg->imageData + transimg->widthStep*y))[x*3+i] = (uchar)val;  
                }  
    }  
    else  
    {  
        for (y = 0; y < srcimg->height; y++)  
            for (x = 0; x < srcimg->width; x++)  
            {  
                float val = ((uchar*)(srcimg->imageData + srcimg->widthStep*y))[x];  
                val+=bright2adj;  
                if(val<0)    val=0;  
                else if(val>255) val=255;  
                ((uchar*)(transimg->imageData + transimg->widthStep*y))[x] = (uchar)val;  
            }  
    }         
    cvShowImage("image",transimg);  
}  
  
void on_mouse3(int event,int x,int y,int flags,void* param)  
{  
    if(event==CV_EVENT_LBUTTONUP)  
        re_adjust_bright(0);  
}  
  
void CCVMFCView::OnAdjustBrightness()  
{  
    srcimg=cvCloneImage(workImg);  
    cvFlip(srcimg);  
    transimg=cvCloneImage(srcimg);    
  
    cvNamedWindow("image",CV_WINDOW_AUTOSIZE);    
    cvCreateTrackbar("亮度", "image", &bright2adj, 255,re_adjust_bright);  
    //re_adjust_bright(0);   
    cvShowImage("image",srcimg);  
  
    cvSetMouseCallback("image",on_mouse3,0);  
  
    cvWaitKey(0);  
    cvDestroyWindow("image");  
    cvReleaseImage(&srcimg);  
    cvFlip(transimg);  
    m_dibFlag=imageReplace(transimg,&workImg);  
  
    m_ImageType=2;  
    Invalidate();  
}  

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读