Hallo,
bei meinem aktuellen OpenCV-Projekt hab ich ein Problem beim anzeigen einer Bitmap. OpenCV stellt ja eigene GUIs bereit. Nun möchte ich das aber natürlich in einer AutoIt-GUI nutzen bzw. darstellen. Dazu hab ich mal ein wei kleine Testscripte geschrieben. Also ich stelle einmal das Original dar und das Bearbeitete. Aber das Bearbeitete sieht nicht so aus, wie in der OpenCV eignen GUI.
Mit OpenCV-GUI:
Spoiler anzeigen
#include "OpenCV.au3"
#include <WinAPIEx.au3>
#include <GDIPlus.au3>
Global $tImage1, $tImage2, $tImage3
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_OpenCV_Startup()
$tImage1 = _OpenCV_LoadImage(@ScriptDir & "\KoLll.bmp")
$tImage2 = _OpenCV_CloneImage($tImage1)
_OpenCV_CvtColor1($tImage2, $CV_BGR2GRAY)
_OpenCV_Threshold($tImage2, 100, 255, $CV_THRESH_BINARY)
_OpenCV_NamedWindow("Image1")
_OpenCV_NamedWindow("Image2")
_OpenCV_MoveWindow("Image1", 50, 50)
_OpenCV_MoveWindow("Image2", 560, 50)
For $i = 16 To 8 Step -2
$tImage3 = _OpenCV_CloneImage($tImage1)
_OpenCV_Resize($tImage3, $i)
_OpenCV_ShowImage("Image1", $tImage3)
_OpenCV_ReleaseImage($tImage3)
$tImage3 = _OpenCV_CloneImage($tImage2)
_OpenCV_Resize($tImage3, $i)
_OpenCV_ShowImage("Image2", $tImage3)
_OpenCV_ReleaseImage($tImage3)
Sleep(1000)
Next
While 1
_Exit()
WEnd
Func _Exit()
_OpenCV_ReleaseImage($tImage1)
_OpenCV_ReleaseImage($tImage2)
_OpenCV_Shutdown()
Exit
EndFunc
Das ganze in AutoIt-GUI:
Spoiler anzeigen
#include "OpenCV.au3"
#include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $tImage1, $tImage2, $tImage3, $hGui, $hBitmap, $cPic1, $cPic2
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_OpenCV_Startup()
$tImage1 = _OpenCV_LoadImage(@ScriptDir & "\KoLll.bmp")
$tImage2 = _OpenCV_CloneImage($tImage1)
_OpenCV_CvtColor1($tImage2, $CV_BGR2GRAY)
_OpenCV_Threshold($tImage2, 100, 255, $CV_THRESH_BINARY)
$hGui = GUICreate("Test", 900, 400, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_MAXIMIZEBOX))
$cPic1 = GUICtrlCreatePic("", 20, 20)
$cPic2 = GUICtrlCreatePic("", 450, 20)
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]For $i = 16 To 8 Step -2
$tImage3 = _OpenCV_CloneImage($tImage1)
_OpenCV_Resize($tImage3, $i)
$hBitmap = _CreateBitmapFromIplImage($tImage3)
_OpenCV_ReleaseImage($tImage3)
_WinAPI_DeleteObject(GUICtrlSendMsg($cPic1, 0x0172, 0, $hBitmap))
$tImage3 = _OpenCV_CloneImage($tImage2)
_OpenCV_Resize($tImage3, $i)
$hBitmap = _CreateBitmapFromIplImage($tImage3)
_OpenCV_ReleaseImage($tImage3)
_WinAPI_DeleteObject(GUICtrlSendMsg($cPic2, 0x0172, 0, $hBitmap))
Sleep(1000)
Next
While 1
Sleep(10)
WEnd
Func _Exit()
_OpenCV_ReleaseImage($tImage1)
_OpenCV_ReleaseImage($tImage2)
_OpenCV_Shutdown()
_WinAPI_DeleteObject($hBitmap)
Exit
EndFunc
Func _CreateBitmapFromIplImage($_tIplImage)
Local $_iWidth = DllStructGetData($_tIplImage, "width")
Local $_iHeight = DllStructGetData($_tIplImage, "height")
Local $_iDepth = DllStructGetData($_tIplImage, "depth")
Local $_iChannels = DllStructGetData($_tIplImage, "nChannels")
Local $_pData = DllStructGetData($_tIplImage, "imageData")
Local $_hBitmap = _WinAPI_CreateDIB($_iWidth, $_iHeight, $_iDepth * $_iChannels)
_WinAPI_SetBitmapBits($_hBitmap, $_iWidth * $_iHeight * $_iChannels, $_pData)
Return $_hBitmap
EndFunc
Das Bild gibts hier.
Weiß jemand woran das liegt?