zoukankan      html  css  js  c++  java
  • 【图像算法】彩色图像分割专题二:显示屏幕上任意点颜色值

    【图像算法】彩色图像分割专题一:显示屏幕上任意点的颜色值

    SkySeraph May 13rd 2011  HQU

    Email:zgzhaobo@gmail.com    QQ:452728574

    Latest Modified Date:May 13rd 2011 HQU

    》说明:

    1  分析彩色图像时,不同空间的选择,需要实时知道图像上某点的颜色值,参考网上相关资料,实现实时显示屏幕上任意点的RGB/HSV/YIQ值,当然还可以是其它色彩空间的值,原理类似没在重复。

    2  关于颜色空间相关知识,请参考:

    http://www.cnblogs.com/skyseraph/archive/2011/05/03/2035643.html

    http://www.cnblogs.com/skyseraph/archive/2011/05/05/2038317.html

    http://www.cnblogs.com/skyseraph/archive/2011/05/05/2038308.html

    3  类似软件

    http://www.broadhurst-family.co.uk/lefteye/MainPages/Lab.htm   RGB/Lab/HSV软件

      

    》实现(源码):

    响应函数

    //////////////////////////////////////////////////////////////////////////
    void CColorSegDlg::OnFetchColor() 
    //  获取屏幕上任意点的RGB值并显示
    {
        m_bSnapFlag^=TRUE;
        if (m_bSnapFlag)  //开启屏幕取色
        {
            m_ColorPicker.SetWindowText("Stop Fetch");
            SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
            SetTimer(1, 80, NULL); //80ms触发一次定时器		
        }
        else
        { 
            m_ColorPicker.SetWindowText("Start Fetch");
            SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
            KillTimer(1);
        }
    //注:另一种方法:不采用bool标记m_bSnapFlag,
    //采用if(m_ColorPicker.GetCheck()) 但这种方法不能实现菜单的控制
    }
    

    Time函数

    void CColorSegDlg::OnTimer(UINT nIDEvent) 
    {
    	if (nIDEvent != 1)
            return;
    	
        CPoint pt;
        GetCursorPos(&pt);
    	
        HDC hDC = ::GetDC(NULL);
        COLORREF clr = ::GetPixel(hDC, pt.x, pt.y);
    	int R=GetRValue(clr);
    	int G=GetGValue(clr);
    	int B=GetBValue(clr);
    	
        //  输出RGB值
    	CString ClrText;
        ClrText.Format("%d",R);//GetRValue(clr)
    	m_EditRed.SetWindowText(ClrText);
    	ClrText.Format("%d",G);//GetGValue(clr)
    	m_EditGreen.SetWindowText(ClrText);
    	ClrText.Format("%d",B);//GetBValue(clr)
    	m_EditBlue.SetWindowText(ClrText);	
    	
    	CString cs;
    	
    	//  HSV	
    	double hsvH,hsvS,hsvV;
    	pMyColorSpace.MyRGB2HSV(R,G,B,hsvH,hsvS,hsvV,1);
    	
    	//  输出HSV值
    	cs.Format("%.3f",hsvH);
    	GetDlgItem(IDC_H)->SetWindowText(cs);
    	cs.Format("%.3f",hsvS);
    	GetDlgItem(IDC_S)->SetWindowText(cs);
    	cs.Format("%.3f",hsvV);
    	GetDlgItem(IDC_V)->SetWindowText(cs);
    	
    	//  YUV && YIQ
    	double yuvY,yuvU,yuvV,yiqY,yiqI,yiqQ;
    	pMyColorSpace.MyRGB2YUV(R,G,B,yuvY,yuvU,yuvV);
    	pMyColorSpace.MyRGB2YIQ(R,G,B,yiqY,yiqI,yiqQ);
    	
    	//int nTH=int(atan(fabs(yuvV/yuvU))*180.0/3.1415926);
    	
    	//  输出YIQ值	
    	cs.Format("%.3f",yiqQ);
    	GetDlgItem(IDC_yiqQ)->SetWindowText(cs);
    	cs.Format("%.3f",yiqI);
    	GetDlgItem(IDC_yiqI)->SetWindowText(cs);
    	cs.Format("%.3f",yiqY);
    	GetDlgItem(IDC_yiqY)->SetWindowText(cs);
    	
    	//  显示区域
    	CRect m_rect;
    	m_Color.GetClientRect(m_rect);
    	CDC* dc = m_Color.GetDC();
    	CBrush m_brush(RGB(GetRValue(clr),GetGValue(clr),GetBValue(clr)));
    	dc->FillRect(m_rect,&m_brush);
    	
        ::ReleaseDC(NULL, hDC);
    	CDialog::OnTimer(nIDEvent);
    }
    

     

    》效果

     

    完整界面见:

    http://www.cnblogs.com/skyseraph/archive/2011/05/05/2038308.html

     

     

    Author:         SKySeraph

    Email/GTalk: zgzhaobo@gmail.com    QQ:452728574

    From:         http://www.cnblogs.com/skyseraph/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,请尊重作者的劳动成果

     

  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/skyseraph/p/2045826.html
Copyright © 2011-2022 走看看