• <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>
            隨筆-145  評(píng)論-173  文章-70  trackbacks-0

            MFC使用OPenCV常用函數(shù)搜集

            ================================1 顯示IplImage到指定窗口==================================
            public:
            BITMAPINFO *m_pBITMAPINFO_24;// 24位真彩圖BITMAPINFO格式固定,提前創(chuàng)建1次并保存指針
            BITMAPINFO *m_pBITMAPINFO_08;// 8位灰度圖BITMAPINFO格式固定,提前創(chuàng)建1次并保存指針
            void DrawImgToWnd(CWnd *pWnd, IplImage *pImg)
            {
            RECT rc;
            pWnd->GetClientRect(&rc);
            CDC *pDC = pWnd->GetDC();
            HDC hdc = pDC->GetSafeHdc();
            if(pImg->nChannels == 3) // 3通道
            {
               m_pBITMAPINFO_24->bmiHeader.biWidth = rc.right;
               m_pBITMAPINFO_24->bmiHeader.biHeight = rc.bottom;//這里負(fù)值表示顯示鏡像位圖
               ::StretchDIBits(
                hdc,
                0, 0, rc.right, rc.bottom,
                0, 0, pImg->width, pImg->height,   
                pImg->imageData, m_pBITMAPINFO_24, DIB_RGB_COLORS, SRCCOPY);
            }
            else // 單通道
            {
               m_pBITMAPINFO_24->bmiHeader.biWidth = rc.right;
               m_pBITMAPINFO_24->bmiHeader.biHeight = rc.bottom;//這里負(fù)值表示顯示鏡像位圖
               ::StretchDIBits(
                hdc,
                0, 0, rc.right, rc.bottom,
                0, 0, pImg->width, pImg->height,
                pImg->imageData, m_pBITMAPINFO_08, DIB_RGB_COLORS, SRCCOPY);
            }
            pWnd->ReleaseDC(pDC);
            }

             

            ==================================2 位圖縮放==================================
            上面的函數(shù)DrawImgToWnd只能原比例顯示位圖,但實(shí)際中通常是要縮放后顯示的

            GDI自帶的插值算法很慢
            ::SetStretchBltMode(hdc, HALFTONE);//名聲很不好的一個(gè)函數(shù)

            GDI+自帶的插值算法很快,但GDI+封裝的太厲害,沒有導(dǎo)出任何接口,使用不方便,效率因此而下降,也可能我沒找到..

            OpenCV的插值算法也非常快,并且給出單獨(dú)的函數(shù)(源碼都有),使用方便,如果合理使用,比GDI+稍快

            當(dāng)然你也可以自己寫插值算法...........

            下面是OpenCV縮放位圖的函數(shù):
            IplImage *pImg_24 = cvCreateImage(cvSize(WND_WIDTH, WND_HEIGHT),8, 3);//創(chuàng)建與窗口同大小的空?qǐng)D
            cvResize(pImg, pImg_24, CV_INTER_LINEAR);//把源圖縮放至窗口大小
            DrawImgToWnd(CWnd *pWnd, pImg_24);//上面寫的函數(shù),顯示與窗口同尺寸的位圖
            cvReleaseImage(&pImg);//釋放內(nèi)存
            如果,pImg_24我們事先定義成公共變量并初始化,將省去每次縮放重復(fù)創(chuàng)建釋放內(nèi)存的操作,這樣做就可以比GDI+快了

            ================================== 3 圖片讀取與轉(zhuǎn)換 ==================================
            // cvLoadImage第二個(gè)參數(shù) -1:讀取圖像的原通道數(shù) 0:強(qiáng)制灰度圖 1: 讀取彩色圖
            IplImage *pImgSrc = cvLoadImage("清晰面包.bmp",-1);
            cvSaveImage("c:\\demo.bmp", pImgSrc);
            cvSaveImage("c:\\demo.png", pImgSrc);
            cvSaveImage("c:\\demo.jpg", pImgSrc);
            cvSaveImage("c:\\demo.tiff", pImgSrc);
            cvReleaseImage(&pImgSrc);
            OpenCV貌似不支持gif文件

            ================================== 4 截取指定部分圖像 ==================================
            IplImage* cvGetSubImage(IplImage *pImgSrc, CvRect rc)
            {
                cvSetImageROI(pImgSrc,rc); // 選中指定部分
                IplImage *pImgDst = cvCreateImage(cvSize(rc.width, rc.height), pImgSrc->depth, pImgSrc->nChannels);
                cvCopy(pImgSrc, pImgDst); // copy源圖選中部分至新圖
                cvResetImageROI(pImgSrc); // 源圖取消選中
                return pImgDst;
            }

            ================================== 5 幾個(gè)常用的小函數(shù) ==================================

            cvSet(pImg,cvScalarAll(255));//把灰度圖置成全白
            cvSet(pImg,cvScalarAll(0));//把灰度圖置成全黑
            cvCvtColor(pImgSrc, pImgDst, CV_BGR2GRAY);//灰度化
            cvThreshold(pImgSrc,pImgDst,141,255,CV_THRESH_BINARY); //灰度圖的二值化,141為閥值

            posted on 2009-12-12 23:31 deercoder 閱讀(1814) 評(píng)論(0)  編輯 收藏 引用 所屬分類: OpenCV / OpenGL
            欧美国产成人久久精品| 色综合久久88色综合天天 | 久久精品国产精品亚洲艾草网美妙 | 亚洲国产日韩欧美久久| 久久久精品国产亚洲成人满18免费网站| 午夜精品久久久久久久| 久久棈精品久久久久久噜噜| 久久强奷乱码老熟女网站| 久久人妻少妇嫩草AV蜜桃| 久久青青草原精品国产| 国产精品免费看久久久香蕉| 久久福利资源国产精品999| 久久天天躁狠狠躁夜夜2020一| 久久精品国产亚洲AV无码麻豆| 久久亚洲精品视频| 狠狠色丁香久久婷婷综合五月 | 很黄很污的网站久久mimi色| 国产叼嘿久久精品久久| 国产精品美女久久久久网| 亚洲AV无码久久精品狠狠爱浪潮| 久久精品9988| 中文字幕一区二区三区久久网站| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国内精品久久久久影院日本| 欧美国产成人久久精品| 午夜精品久久久内射近拍高清| 色综合合久久天天给综看| 亚洲精品国精品久久99热一| 久久99久国产麻精品66| 久久久久久久亚洲Av无码| 中文字幕乱码久久午夜| 久久777国产线看观看精品| 久久99精品国产一区二区三区 | 久久婷婷五月综合成人D啪| 国产成人久久777777| 久久性生大片免费观看性| 97久久国产露脸精品国产| 久久99精品国产99久久| 久久久久久久久久久| 欧美伊香蕉久久综合类网站| 日本欧美国产精品第一页久久|