OpenCV vs. MFC



  • Schönen guten Abend,
    Ich möchte einige "IplImages" in "Picture Controls" in MFC darstellen
    Diese Bilder erhalte ich in einer Callback Funktion von einer Kamera, dort werden die Daten global in ein Array geschrieben.
    Das eigentliche Problem ist, dass sich,wenn ich diese Bilder darstelle, all meine Controls nicht mehr bedienen lassen. Die Applikation lässt sich somit auch nicht mehr vernünftig schließen aber die Bilder an sich sind gut dargestellt.

    Diese Funktion stellt die Bilder dar und wird in einer Endlosschleife ausgerufen:

    void CTZG01_GUIDlg::showpics(unsigned short *pic)
    {
            if(pic != NULL)
            {
                    unsigned char row=0,column=0;
                    CBitmap *cbmp;
                    IplImage* simg = cvCreateImage(cvSize(176,144),IPL_DEPTH_16U,1);
                    CvScalar s;
                    int bfcnt=0;
                    for(row=0;row<144;row++)
                    {
                            for(column=0;column<176;column++)
                            {
                                    s.val[0]=pic[bfcnt];
                                    cvSet2D(simg,row,column,s);
                                    bfcnt++;
                            }
                    }
                    cbmp = IplImageToCBitmap(simg);
                    picint.SetBitmap(*cbmp);
                    cvReleaseImage( &simg );
            }
    }
    

    Und hier wird ein IplImage in ein CBitmap konvertiert:

    CBitmap* IplImageToCBitmap(IplImage* img)
    {
            CDC dc;
            CDC memDC;
            if (!dc.CreateDC(L"DISPLAY", NULL, NULL, NULL))
                    return NULL;
            if (!memDC.CreateCompatibleDC(&dc))
                    return NULL;
            CBitmap* bmp = new CBitmap();
            CBitmap* pOldBitmap;
            bmp->CreateCompatibleBitmap(&dc, img->width, img->height);
            pOldBitmap = memDC.SelectObject(bmp);
            CvvImage cvImage; // Undocumented class
            cvImage.CopyOf(img);
            cvImage.Show(memDC.m_hDC, 0, 0, img->width, img->height, 0, 0);
            cvImage.Destroy();
            memDC.SelectObject(pOldBitmap);
            memDC.DeleteDC();
            dc.DeleteDC();
            return bmp;
    }
    

    Hat jemand ne Idee?
    MfG



  • Servus,

    evtl ein Problem zwecks der 16bit vs 8bit Bitmap? Gray vs Color?
    ich weiß nicht, was CopyOf bzw. Show aus der Sache macht.

    Ansonsten seh ich auf die Schnelle kein Problem.


  • Mod


Log in to reply