ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
1736
1736
EMPFEHLEN
-
Hi,
ich suche einen Weg IplImages der OpenCV-Bildverarbeitungsbibliothek im Fenster einer MFC-Dialog-Applikation darzustellen. Ich arbeite mit VS 2005. Im Dialog befindet sich eine Picture-Control (IDC_IMG) und eine Groupbox (IDC_IMGSTAT). Mit folgendem Code in der OnInitDialog() Methode versuche ich in eines (hier Picture-Control) der beiden Elemente zu zeichen:
Code :1 2 3 4 5 6
HWND hPic = NULL; GetDlgItem(IDC_IMG, &hPic); char* szWindName = (char*)cvGetWindowName(hPic); IplImage *exclude = cvLoadImage("exclude2.bmp",0); cvvShowImage(szWindName,exclude);
in allen Fällen wird fehlerfrei compiliert, nur zu sehen ist nichts
Hoffe ihr habt einen Rat.
Gruß Emu
-
Ok,... dann werde ich mir mal antworten

folgende Funktion in der dlg Klasse gibt Abhilfe:
Code :1 2 3 4 5 6 7 8 9 10 11
void CWinRapDlg::ShowInComp(int IDC_IMG,IplImage* TheImage) { CvvImage shw; if (TheImage->nChannels == 3 ) shw.CopyOf(TheImage); else shw.CopyOf(TheImage,1); CDC *pDC = GetDlgItem(IDC_IMG)->GetDC(); CRect rect; GetDlgItem(IDC_IMG)->GetClientRect(&rect); shw.DrawToHDC( pDC->m_hDC, &rect); ReleaseDC(pDC); }
Übergeben wird die IDC des Steuerelements, indem das Bild dargestellt werden soll und das gewünschte IplImage. Ich verwende als Control jetzt immer Picturecontrols. Diese Funktion muss immer dann aufgerufen werden, wenn das Bild neu gezeichnet werden muss (Fenster wird verschoben; nächstes Bild etc.).
Bis bald
EmuGeändert von Nukleo (05.08.08 um 10:54 Uhr)
-
11.11.10 13:24 #3Wormsphil Tutorials.de Gastzugang
Hoffe du verfolgst das Forum noch!
Habe deinen Codeschnippsel soeben verwedet, aber bei mir lassen sich die Controls des MFC-Dialogs nicht mehr bedienen sobald ich die Bilder in die Picture controls geladen habe.
Hattest du ähnliche Probleme?
MfG Flashmaster
-
hey.
du musst threads verwenden, da sonst das passiert was du beschreibst.
hier eine anleitung:
CWinThread* m_pThread; //in der Klasse MyClass
===================================================
Die Haupt-Thread-Funktion:
___________________________________________________
// static UINT thrfunc(LPVOID); Brauch im Dialog nicht statisch zu sein
UINT MyClass::thrfunc(LPVOID pParam)
{
MyClass* p_my_class = (MyClass*) pParam;
p_my_class->MyFunc(); //MyFunc, die sich in der Klasse befindet
return 0;
}
___________________________________________________
Die Start-Thread-Funktion:
Kann genauso gelassen werden.
___________________________________________________
void CdfgdfgerDlg::Thread_Starten(void)
{
m_pThread = AfxBeginThread(thrfunc, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
m_pThread->m_bAutoDelete = FALSE;
m_pThread->ResumeThread();
}
___________________________________________________
Die End-Thread-Funktion:
Kann genauso gelassen werden.
___________________________________________________
void CdfgdfgerDlg::Thread_Stoppen(void)
{
if(m_pThread)
{
m_pThread->SuspendThread();
delete m_pThread;
m_pThread = NULL;
}
}
___________________________________________________
Wenn Thread aktiv, kann Info. über den "aktiv Befehl" "vom Hintergrund" geholt werden.
Am besten im Thread-Hauptfunktion den Befehl Thread-stopp() erteilen.
Ähnliche Themen
-
OpenCv: Graustufe nach RGB
Von Jey im Forum C/C++Antworten: 4Letzter Beitrag: 12.10.11, 08:37 -
OpenCV Speicherüberlauf
Von bertonex19 im Forum C/C++Antworten: 1Letzter Beitrag: 18.11.10, 11:36 -
Objekt bzw. Farberkennung mit OpenCV
Von Blubbdiblubb im Forum C/C++Antworten: 0Letzter Beitrag: 24.01.10, 12:32 -
OpenCV - Linien erkennen
Von oizo2unreal im Forum VisualStudio & MFCAntworten: 0Letzter Beitrag: 16.05.08, 12:16 -
NCCF mit OpenCv
Von kalua25 im Forum C/C++Antworten: 0Letzter Beitrag: 29.03.06, 12:12





Zitieren
Login






