【映像演算法】彩色映像分割專題二:顯示螢幕上任意點顏色值

來源:互聯網
上載者:User

【映像演算法】彩色映像分割專題一:顯示螢幕上任意點的顏色值

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;// HSVdouble 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 && YIQdouble 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/

本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,請尊重作者的勞動成果

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.