• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Make Oneself More Strong

            mcs51a( 高興就寫點(diǎn):-),不高興就不寫 )

            2013年7月9日 #

            雜感20130709

            DirectUI 控件,具有簡(jiǎn)單,可擴(kuò)展性好等的特點(diǎn),但是實(shí)際開發(fā)的時(shí)候,遇到復(fù)雜的控件,還是喜歡WIN32窗口句柄模式寫控件,原因有如下幾個(gè)
            1、消息隊(duì)列具有線程的安全性。
            2、不需要考慮FOCUS,SIZE,MOVE,PAINT,MOUSE,KEY這些框架消息的DISPATCH
            3、和已經(jīng)有的MFC,WIN32代碼融合的時(shí)間比較少。

            posted @ 2013-07-09 16:36 mcs51a 閱讀(1634) | 評(píng)論 (0)編輯 收藏

            2013年4月16日 #

            Dark Channel Prior去霧效果


            Dark Channel Prior去霧的算法,下載了個(gè)現(xiàn)成的測(cè)試一下,果然效果不錯(cuò),效果如下。

            百度文庫(kù)里的文檔
            http://wenku.baidu.com/view/eae99905bed5b9f3f90f1cfd.html


            測(cè)試圖像,
             


            結(jié)果圖像

            posted @ 2013-04-16 19:39 mcs51a 閱讀(1776) | 評(píng)論 (0)編輯 收藏

            2013年2月21日 #

            圖像形態(tài)學(xué)膨脹的結(jié)構(gòu)分解opencv實(shí)驗(yàn)

            寬度W,高度H 的圖像,做膨脹操作,如果膨脹的結(jié)構(gòu)元素structure element,大小為kw,kh,那么就需要做W*H*kw*kh次運(yùn)算,運(yùn)算量比較大。

            根據(jù)圖像形態(tài)學(xué)的理論,膨脹滿足結(jié)合律,即B和C為結(jié)構(gòu)元素。假設(shè)一個(gè)結(jié)構(gòu)元素S可以表示為兩個(gè)結(jié)構(gòu)元素B和C的膨脹,即S=B⊕C,則A⊕S=A⊕(B⊕C)=(A⊕B)⊕C,換言之,用S膨脹A等同于用B先膨脹A,再用C膨脹前面的結(jié)果。我們稱S能夠分解成B和C兩個(gè)結(jié)構(gòu)元素。結(jié)合律很重要,因?yàn)橛?jì)算膨脹所需要的時(shí)間正比于結(jié)構(gòu)元素中的非零像素的個(gè)數(shù)。通過上述推導(dǎo),分解結(jié)構(gòu)元素,然后再分別用子結(jié)構(gòu)元素進(jìn)行膨脹操作往往會(huì)實(shí)現(xiàn)很客觀的速度的增長(zhǎng)。

            同樣,腐蝕也可以做結(jié)構(gòu)分解,腐蝕滿足公式 ,B和C為結(jié)構(gòu)元素,同樣如果一個(gè)結(jié)構(gòu)元素S可以表示為兩個(gè)結(jié)構(gòu)元素B和C的膨脹,即S=B⊕C,那么用S腐蝕A等同于用B先腐蝕A,再用C腐蝕前面的結(jié)果。公式推導(dǎo)省略。

            圖像形態(tài)學(xué)膨脹和腐蝕介紹,可見
                http://en.wikipedia.org/wiki/Erosion_(morphology)
                http://en.wikipedia.org/wiki/Dilation_(morphology)
              

            做結(jié)構(gòu)分解后的運(yùn)算量為W*H*(kw+kh)


            代碼如下

             1#include <cv.h>
             2#include <highgui.h>
             3#include <stdio.h>
             4
             5
             6int main(int argc, char** argv)
             7{
             8    if(argc<2)  {
             9        printf("has no param\n");
            10        return 0;
            11    }

            12
            13    IplConvKernel *element1 = cvCreateStructuringElementEx( 12500, CV_SHAPE_RECT, 0);
            14    IplConvKernel *element2 = cvCreateStructuringElementEx( 16100, CV_SHAPE_RECT, 0);
            15    IplConvKernel *element3 = cvCreateStructuringElementEx( 162500, CV_SHAPE_RECT, 0);
            16    
            17    IplImage* src=cvLoadImage(argv[1],1); 
            18    
            19
            20    if( src!= NULL)
            21    {
            22        
            23        IplImage* img = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
            24        cvCvtColor(src,img,CV_BGR2GRAY);
            25        cvReleaseImage(&src);
            26        
            27        
            28        IplImage* tmp = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
            29        cvDilate( img, tmp, element1, 1);
            30        
            31        IplImage* dst1 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);            
            32        cvDilate( tmp, dst1, element2, 1);
            33        
            34        
            35        IplImage* dst2 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);    
            36        cvDilate( img, dst2, element3, 1);
            37        
            38        IplImage* diff = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);    
            39        cvSub(dst2,dst1,tmp,NULL);
            40        cvEqualizeHist( tmp, diff);
            41        cvReleaseImage(&tmp);
            42        
            43        int noZeroCount=cvCountNonZero(diff);
            44        printf("no zerocount %d\n",noZeroCount);
            45        
            46        
            47        cvNamedWindow("img",CV_WINDOW_AUTOSIZE);
            48        cvShowImage("img",img);
            49        cvNamedWindow("dst1",CV_WINDOW_AUTOSIZE);
            50        cvShowImage("dst1",dst1);
            51        cvNamedWindow("dst2",CV_WINDOW_AUTOSIZE);
            52        cvShowImage("dst2",dst2);
            53        cvNamedWindow("diff",CV_WINDOW_AUTOSIZE);
            54        cvShowImage("diff",diff);
            55        
            56        
            57        cvWaitKey();
            58        cvDestroyAllWindows();
            59        
            60        
            61        cvReleaseImage(&img);
            62        cvReleaseImage(&dst1);
            63        cvReleaseImage(&dst2);
            64        cvReleaseImage(&diff);
            65        
            66        cvReleaseStructuringElement(&element1);
            67        cvReleaseStructuringElement(&element2);
            68        cvReleaseStructuringElement(&element3);
            69        
            70        
            71        
            72        
            73        
            74    }

            75    else
            76    {
            77        printf("error,not load\n");
            78    }

            79    return 0;
            80}
            ;
            81

             

             

            posted @ 2013-02-21 10:39 mcs51a 閱讀(2299) | 評(píng)論 (0)編輯 收藏

            2012年8月18日 #

            richedit中的GIF顯示

            代碼下載如下
              http://www.shnenglu.com/Files/mcs51a/GifDisplayCtrl.rar

            posted @ 2012-08-18 06:52 mcs51a 閱讀(2170) | 評(píng)論 (3)編輯 收藏

            2011年12月5日 #

            【隨想】對(duì)N項(xiàng)數(shù)據(jù)進(jìn)行判斷,生成兩類不同結(jié)果,如何產(chǎn)生最后判斷

            對(duì)N項(xiàng)數(shù)據(jù)進(jìn)行判斷,生成N項(xiàng)結(jié)果,這些結(jié)果中有YES,也有NO,采用何種方法,產(chǎn)生最后結(jié)果。

            0. 努力使結(jié)果一致
               在判斷之前,對(duì)N項(xiàng)數(shù)據(jù)過濾,看是否出現(xiàn)異常,去掉那些因?yàn)閿?shù)據(jù)異常而產(chǎn)生的結(jié)果,努力使所有結(jié)果一致,全是YES或全是NO,當(dāng)然這就困難了。

            1.單值判斷
              1.1 嚴(yán)格判斷,只要有一項(xiàng)結(jié)果為NO,就認(rèn)為最后結(jié)果為NO。
              1.2 寬松判斷,只要有一項(xiàng)結(jié)果為YES,就認(rèn)為最后結(jié)果為YES。

            2. 對(duì)出現(xiàn)的兩類結(jié)果次數(shù)進(jìn)行比較,選擇出現(xiàn)次數(shù)多的那項(xiàng)。

            3. 根據(jù)重要程度來(lái)判斷。先數(shù)值化結(jié)果,使YES的值為1,NO的值為0。然后再根據(jù)數(shù)據(jù)的重要程度,定義一些數(shù)值,稱為重要因子。每項(xiàng)數(shù)據(jù)產(chǎn)生的數(shù)值結(jié)果乘以對(duì)應(yīng)的重要因子,再相加這些結(jié)果,得出的和值,與給定的閾值相比較,得出最后結(jié)果。

            posted @ 2011-12-05 00:42 mcs51a 閱讀(1628) | 評(píng)論 (0)編輯 收藏

            2011年6月7日 #

            Skinlib 中CSkinDialog的代碼分析

            SkinLib的代碼簡(jiǎn)單明了,對(duì)于想學(xué)習(xí)和了解UI Skin的原理來(lái)說(shuō)是合適的. 相關(guān)鏈接如下
            http://www.shnenglu.com/netboy/archive/2009/02/15/73863.html

            CSkinDialog 使用Hook,WndProc技術(shù),重載原有繪制消息過程.
            CSkinDialog的區(qū)域分為客戶區(qū)域和非客戶區(qū)域,CSkinDialog的非客戶區(qū)域又被分為如下幾個(gè)子區(qū)域,
            1.左邊緣,m_nToLeft為窗口的左邊緣長(zhǎng)度.
            2.右邊緣,m_nToRight為右邊緣的長(zhǎng)度.
            3.Caption區(qū)域,m_nToTop 為其高度,Caption 區(qū)域又可以分為
              3.1.(0,0,m_nTopLeft,m_nToTop)
              3.2.標(biāo)題區(qū)域 (m_nTopLeft,0,rcWnd.Width()-m_nTopRight,m_nToTop)
              3.3.close,max,min 按鈕區(qū)域
            4.下部邊緣,m_nToBottom為下部邊緣的高度

            根據(jù)配置文件,讀取到相應(yīng)的Skin,繪制上述Dialog幾個(gè)子區(qū)域.
            1.DrawBorder繪制左,右,下部邊緣.
            2.DrawCaption繪制Caption區(qū)域.

            posted @ 2011-06-07 18:07 mcs51a 閱讀(2083) | 評(píng)論 (0)編輯 收藏

            2011年6月6日 #

            圖像變形(image warping)的算法資源

            Affine ,Perspective變形 資源很多,
            可以查看OpenCV

            不規(guī)則變形
            http://paulbourke.net/miscellaneous/imagewarp/

            鼠標(biāo)拉伸改變圖像的
            http://www.codeproject.com/KB/graphics/localimagewarper.aspx?q=warp

            Photoshop液化工具箱中向前變形工具
            http://www.cnblogs.com/xiaotie/archive/2009/12/08/1619046.html

            posted @ 2011-06-06 22:08 mcs51a 閱讀(3967) | 評(píng)論 (1)編輯 收藏

            2011年2月16日 #

            Win32 中等待線程調(diào)用的結(jié)束

              
               如果在.net中一個(gè)線程等待另外一個(gè)線程的完成,可以使用System.Threading.Thread.Join, 在Win32 下的相應(yīng)的等效代碼   
            1 WaitForSingleObject(hThread,INFINITE);
            2 
            3 CloseHandle(hThread);
               Win32 中CreateThread出來(lái)的hThread屬于整個(gè)Process,線程中的回調(diào)函數(shù)結(jié)束后,不會(huì)失效,只有調(diào)用者調(diào)用CloseHandle,才最后真正的釋放系統(tǒng)中Thread 的資源.
              
               如果線程的回調(diào)函數(shù)已經(jīng)結(jié)束,那么hThread 處于激活狀態(tài),WaitForSignleObject 便能獲取到當(dāng)前狀態(tài),成功返回;如果沒有,WaitForSignleObject 便一直等待線程的回調(diào)結(jié)束.

               如果你想一個(gè)線程中等待另外一個(gè)線程回調(diào)結(jié)束的同時(shí),進(jìn)行消息MSG的分發(fā),或者做其他的事情.例如主UI線程在等待工作線程完成的同時(shí),需要更新UI上的進(jìn)度條,這時(shí)可以讓工作線程發(fā)送進(jìn)度消息MSG給主UI線程,主UI線程接受到消息MSG更新UI.可以在主UI線程中使用MsgWaitForMultipleObjects函數(shù)達(dá)到這一效果, 
             1 MSG msg;
             2 
             3 BOOL bLoop=TRUE;
             4 
             5 while(bLoop)
             6 {
             7 
             8     int nWait=MsgWaitForMultipleObjects(1,&hThread,FALSE,3000,QS_ALLEVENTS);
             9     switch(nWait) 
            10     {
            11     case WAIT_TIMEOUT:
            12     case WAIT_OBJECT_0+1:
            13         {
            14             while( PeekMessage( &msg, NULL, 00, PM_REMOVE ) ) {
            15                 TranslateMessage(&msg);
            16                 DispatchMessage( &msg );
            17             }
            18             break;
            19         }
            20 
            21     case WAIT_OBJECT_0:
            22     default:
            23         bLoop=FALSE;
            24         break;
            25     }
            26 };
            27 CloseHandle(hThread);
            28 
            29 
            30 





            posted @ 2011-02-16 14:00 mcs51a 閱讀(2132) | 評(píng)論 (0)編輯 收藏

            2011年1月18日 #

            Aforge.net 二值圖像區(qū)域分割cpp移植

            代碼下載鏈接如下,
              http://www.shnenglu.com/Files/mcs51a/blobcounter.rar

            代碼中涉及到的DIB操作 是8Bit 的二值圖像.



            posted @ 2011-01-18 11:08 mcs51a 閱讀(2124) | 評(píng)論 (0)編輯 收藏

            2010年9月15日 #

            不要隨便使用CreateThread

              CreateThread,是WIN32 最直接創(chuàng)建的thread API函數(shù).但是如果在線程回調(diào)(CALLBACK)函數(shù)中使用一些標(biāo)準(zhǔn)C的函數(shù),當(dāng)線程正常退出的時(shí)候,即使你釋放了所有用戶資源,仍然會(huì)有資源的泄漏的隱患。主要原因是線程中都需要有額外的資源,來(lái)保證一些標(biāo)準(zhǔn)C函數(shù)的線程安全,這些資源的創(chuàng)建是在C的標(biāo)準(zhǔn)函數(shù)被調(diào)用的時(shí)候,但是在thread退出的時(shí)候,沒法通過正常途徑釋放。
              如果在你的回調(diào)函數(shù)中使用一些標(biāo)準(zhǔn)C函數(shù),最好使用_beginthreadex,_endthreadex替換掉原來(lái)的CreateThread, _endthreadex 會(huì)釋放這些資源,或者AfxBeginThread(里面有調(diào)用_beginthreadex,_endthreadex)
              具體原因查看《程序員的修養(yǎng),編譯與鏈接》一書。
             

            posted @ 2010-09-15 10:49 mcs51a 閱讀(1265) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題  下一頁(yè)
            久久亚洲电影| 久久婷婷是五月综合色狠狠| 久久精品国产男包| 久久人人爽人人爽人人AV| www.久久热.com| 久久亚洲中文字幕精品一区四| 欧美亚洲另类久久综合婷婷| 亚洲欧美一区二区三区久久| 蜜臀久久99精品久久久久久小说| 91精品国产91久久久久久蜜臀| 亚洲国产成人久久一区WWW| 久久精品人人做人人爽电影| 久久精品国产免费| 无码八A片人妻少妇久久| 99久久免费国产精精品| 午夜福利91久久福利| 99久久777色| 亚洲va中文字幕无码久久| 久久99精品国产99久久| 亚洲日韩中文无码久久| 国产2021久久精品| 东京热TOKYO综合久久精品| 久久人做人爽一区二区三区| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 国产99久久九九精品无码| 久久久久99这里有精品10| 久久国产福利免费| 精品蜜臀久久久久99网站| 波多野结衣AV无码久久一区| 亚洲精品无码久久久| 久久亚洲高清综合| 久久综合成人网| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲精品白浆高清久久久久久 | 一级做a爰片久久毛片看看| 亚洲国产成人久久精品动漫| 91精品国产综合久久久久久| 久久久久亚洲Av无码专| 久久久久亚洲精品天堂| 久久99精品久久只有精品| 精品无码久久久久国产|