雜感20130709
DirectUI 控件,具有簡單,可擴展性好等的特點,但是實際開發的時候,遇到復雜的控件,還是喜歡WIN32窗口句柄模式寫控件,原因有如下幾個1、消息隊列具有線程的安全性。
2、不需要考慮FOCUS,SIZE,MOVE,PAINT,MOUSE,KEY這些框架消息的DISPATCH
3、和已經有的MFC,WIN32代碼融合的時間比較少。
posted @ 2013-07-09 16:36 mcs51a 閱讀(1651) | 評論 (0) | 編輯 收藏
mcs51a( 高興就寫點:-),不高興就不寫 )
2013年7月9日 #
posted @ 2013-07-09 16:36 mcs51a 閱讀(1651) | 評論 (0) | 編輯 收藏
2013年4月16日 #

posted @ 2013-04-16 19:39 mcs51a 閱讀(1795) | 評論 (0) | 編輯 收藏
2013年2月21日 #
寬度W,高度H 的圖像,做膨脹操作,如果膨脹的結構元素structure element,大小為kw,kh,那么就需要做W*H*kw*kh次運算,運算量比較大。
根據圖像形態學的理論,膨脹滿足結合律,即
,B和C為結構元素。假設一個結構元素S可以表示為兩個結構元素B和C的膨脹,即S=B⊕C,則A⊕S=A⊕(B⊕C)=(A⊕B)⊕C,換言之,用S膨脹A等同于用B先膨脹A,再用C膨脹前面的結果。我們稱S能夠分解成B和C兩個結構元素。結合律很重要,因為計算膨脹所需要的時間正比于結構元素中的非零像素的個數。通過上述推導,分解結構元素,然后再分別用子結構元素進行膨脹操作往往會實現很客觀的速度的增長。
同樣,腐蝕也可以做結構分解,腐蝕滿足公式
,B和C為結構元素,同樣如果一個結構元素S可以表示為兩個結構元素B和C的膨脹,即S=B⊕C,那么用S腐蝕A等同于用B先腐蝕A,再用C腐蝕前面的結果。公式推導省略。
圖像形態學膨脹和腐蝕介紹,可見
http://en.wikipedia.org/wiki/Erosion_(morphology)
http://en.wikipedia.org/wiki/Dilation_(morphology)
做結構分解后的運算量為W*H*(kw+kh)
代碼如下
#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
if(argc<2) {
printf("has no param\n");
return 0;
}
IplConvKernel *element1 = cvCreateStructuringElementEx( 1, 25, 0, 0, CV_SHAPE_RECT, 0);
IplConvKernel *element2 = cvCreateStructuringElementEx( 16, 1, 0, 0, CV_SHAPE_RECT, 0);
IplConvKernel *element3 = cvCreateStructuringElementEx( 16, 25, 0, 0, CV_SHAPE_RECT, 0);
IplImage* src=cvLoadImage(argv[1],1);

if( src!= NULL)
{
IplImage* img = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
cvCvtColor(src,img,CV_BGR2GRAY);
cvReleaseImage(&src);
IplImage* tmp = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvDilate( img, tmp, element1, 1);
IplImage* dst1 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvDilate( tmp, dst1, element2, 1);
IplImage* dst2 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvDilate( img, dst2, element3, 1);
IplImage* diff = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvSub(dst2,dst1,tmp,NULL);
cvEqualizeHist( tmp, diff);
cvReleaseImage(&tmp);
int noZeroCount=cvCountNonZero(diff);
printf("no zerocount %d\n",noZeroCount);
cvNamedWindow("img",CV_WINDOW_AUTOSIZE);
cvShowImage("img",img);
cvNamedWindow("dst1",CV_WINDOW_AUTOSIZE);
cvShowImage("dst1",dst1);
cvNamedWindow("dst2",CV_WINDOW_AUTOSIZE);
cvShowImage("dst2",dst2);
cvNamedWindow("diff",CV_WINDOW_AUTOSIZE);
cvShowImage("diff",diff);
cvWaitKey();
cvDestroyAllWindows();
cvReleaseImage(&img);
cvReleaseImage(&dst1);
cvReleaseImage(&dst2);
cvReleaseImage(&diff);
cvReleaseStructuringElement(&element1);
cvReleaseStructuringElement(&element2);
cvReleaseStructuringElement(&element3);
}
else
{
printf("error,not load\n");
}
return 0;
};
posted @ 2013-02-21 10:39 mcs51a 閱讀(2324) | 評論 (0) | 編輯 收藏
2012年8月18日 #
posted @ 2012-08-18 06:52 mcs51a 閱讀(2199) | 評論 (3) | 編輯 收藏
2011年12月5日 #
posted @ 2011-12-05 00:42 mcs51a 閱讀(1639) | 評論 (0) | 編輯 收藏
2011年6月7日 #
posted @ 2011-06-07 18:07 mcs51a 閱讀(2101) | 評論 (0) | 編輯 收藏
2011年6月6日 #
posted @ 2011-06-06 22:08 mcs51a 閱讀(3992) | 評論 (1) | 編輯 收藏
2011年2月16日 #
posted @ 2011-02-16 14:00 mcs51a 閱讀(2151) | 評論 (0) | 編輯 收藏
2011年1月18日 #
posted @ 2011-01-18 11:08 mcs51a 閱讀(2140) | 評論 (0) | 編輯 收藏
2010年9月15日 #
posted @ 2010-09-15 10:49 mcs51a 閱讀(1283) | 評論 (0) | 編輯 收藏