I managed to do that using following PureBasic code but it does not give me the camera control zoom in/out, pan,tilt from above second screenshot.
Following code also do not giving me the choice to select camera as i have 3 camera connected (1 is integrated camera, others are USB 2.0 camera's), following code always preselect the integrated camera.
Code: Select all
IncludeFile "includes/cv_functions.pbi"
Global lpPrevWndFunc, *capture.CvCapture
Global DefBrightness.d, MaxBrightness.d, MinBrightness.d, DefContrast.d, MaxContrast.d, MinContrast.d
Global DefGamma.d, MaxGamma.d, MinGamma.d, DefSaturation.d, MaxSaturation.d, MinSaturation.d
Global DefHue.d, MaxHue.d, MinHue.d, DefSharpness.d, MaxSharpness.d, MinSharpness.d
Global DefExposure.d, MaxExposure.d, MinExposure.d
#CV_WINDOW_NAME = "PureBasic Interface to OpenCV"
#CV_DESCRIPTION = "Creates an interface to the webcam's parameters such as brightness, contrast, hue, etc." + #LF$ + #LF$ +
"A preference file is created if one cannot be found."
Procedure ReadCamData()
If OpenPreferences("other/preferences.txt")
DefBrightness = ReadPreferenceLong("DefBrightness", 1)
DefContrast = ReadPreferenceLong("DefContrast", 1)
DefGamma = ReadPreferenceLong("DefGamma", 1)
DefSaturation = ReadPreferenceLong("DefSaturation", 1)
DefHue = ReadPreferenceLong("DefHue", 1)
DefSharpness = ReadPreferenceLong("DefSharpness", 1)
DefExposure = ReadPreferenceLong("DefExposure", 1)
MaxBrightness = ReadPreferenceLong("MaxBrightness", 1)
MaxContrast = ReadPreferenceLong("MaxContrast", 1)
MaxGamma = ReadPreferenceLong("MaxGamma", 1)
MaxSaturation = ReadPreferenceLong("MaxSaturation", 1)
MaxHue = ReadPreferenceLong("MaxHue", 1)
MaxSharpness = ReadPreferenceLong("MaxSharpness", 1)
MaxExposure = ReadPreferenceLong("MaxExposure", 1)
MinBrightness = ReadPreferenceLong("MinBrightness", 1)
MinContrast = ReadPreferenceLong("MinContrast", 1)
MinGamma = ReadPreferenceLong("MinGamma", 1)
MinSaturation = ReadPreferenceLong("MinSaturation", 1)
MinHue = ReadPreferenceLong("MinHue", 1)
MinSharpness = ReadPreferenceLong("MinSharpness", 1)
MinExposure = ReadPreferenceLong("MinExposure", 1)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, DefBrightness)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, DefContrast)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, DefGamma)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, DefSaturation)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, DefHue)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, DefSharpness)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, DefExposure)
Else
CreatePreferences("other/preferences.txt")
defValue.d = 0
value.d = 0
retValue.d = 0
OpenWindow(0, 0, 0, 300, 100, #CV_WINDOW_NAME, #PB_Window_ScreenCentered | #PB_Window_Tool)
TextGadget(30, 10, 40, 280, 20, "Testing webcam parameters...", #PB_Text_Center)
defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS)
WritePreferenceLong("DefBrightness", defValue)
DefBrightness = defValue
For k = defValue To 1000 Step 1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS)
If value > retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MaxBrightness", cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS))
MaxBrightness = retValue
For k = defValue To 0 Step -1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS)
If value > retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MinBrightness", cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS))
MinBrightness = retValue
cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, defValue)
defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST)
WritePreferenceLong("DefContrast", defValue)
DefContrast = defValue
For k = defValue To 1000 Step 1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST)
If value > retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MaxContrast", cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST))
MaxContrast = retValue
For k = defValue To 0 Step -1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST)
If value < retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MinContrast", cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST))
MinContrast = retValue
cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, defValue)
defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA)
WritePreferenceLong("DefGamma", defValue)
DefGamma = defValue
For k = defValue To 1000 Step 5
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA)
If value > retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MaxGamma", cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA))
MaxGamma = retValue
For k = defValue To 0 Step -5
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA)
If value < retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MinGamma", cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA))
MinGamma = retValue
cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, defValue)
defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION)
WritePreferenceLong("DefSaturation", defValue)
DefSaturation = defValue
For k = defValue To 1000 Step 1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION)
If value > retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MaxSaturation", cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION))
MaxSaturation = retValue
For k = defValue To 0 Step -1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION)
If value < retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MinSaturation", cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION))
MinSaturation = retValue
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, defValue)
defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE)
WritePreferenceLong("DefHue", defValue)
DefHue = defValue
For k = defValue To 1000 Step 1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE)
If value > retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MaxHue", cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE))
MaxHue = retValue
For k = defValue To 0 Step -1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE)
If value < retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MinHue", cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE))
MinHue = retValue
cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, defValue)
defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS)
WritePreferenceLong("DefSharpness", defValue)
DefSharpness = defValue
For k = defValue To 1000 Step 1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS)
If value > retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MaxSharpness", cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS))
MaxSharpness = retValue
For k = defValue To 0 Step -1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS)
If value < retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MinSharpness", cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS))
MinSharpness = retValue
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, defValue)
defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE)
WritePreferenceLong("DefExposure", defValue)
DefExposure = defValue
For k = defValue To 1000 Step 1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE)
If value > retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MaxExposure", cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE))
MaxExposure = retValue
For k = defValue To 0 Step -1
value = k
cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, value)
retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE)
If value < retValue : Break : EndIf
FixWindowUnresponsive()
Next
WritePreferenceLong("MinExposure", cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE))
MinExposure = retValue
cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, defValue)
CloseWindow(0)
EndIf
EndProcedure
Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_NOTIFY
val.d = GetGadgetState(wParam)
Select wParam
Case 8
cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, val)
WritePreferenceLong("DefBrightness", val)
Case 9
cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, val)
WritePreferenceLong("DefContrast", val)
Case 10
cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, val)
WritePreferenceLong("DefGamma", val)
Case 11
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, val)
WritePreferenceLong("DefSaturation", val)
Case 12
cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, val)
WritePreferenceLong("DefHue", val)
Case 13
cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, val)
WritePreferenceLong("DefSharpness", val)
Case 14
cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, val)
WritePreferenceLong("DefExposure", val)
EndSelect
EndSelect
ProcedureReturn CallWindowProc_(lpPrevWndFunc, hWnd, uMsg, wParam, lParam)
EndProcedure
Repeat
nCreate + 1
*capture = cvCreateCameraCapture(#CV_CAP_ANY)
Until nCreate = 5 Or *capture
If *capture
ReadCamData()
FrameWidth = cvGetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_WIDTH)
FrameHeight = cvGetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_HEIGHT)
If FrameWidth > 640
nRatio.d = 640 / FrameWidth
FrameWidth * nRatio : FrameHeight * nRatio
cvSetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_WIDTH, FrameWidth)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_HEIGHT, FrameHeight)
EndIf
*image.IplImage : pbImage = CreateImage(#PB_Any, FrameWidth, FrameHeight)
If OpenWindow(0, 0, 0, FrameWidth + 140, FrameHeight, #CV_WINDOW_NAME, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
lpPrevWndFunc = SetWindowLongPtr_(WindowID(0), #GWL_WNDPROC, @WindowCallback())
ImageGadget(0, 0, 0, FrameWidth, FrameHeight, ImageID(pbImage))
TextGadget(1, 650, 25, 60, 20, "Brightness:", #PB_Text_Right)
TextGadget(2, 650, 50, 60, 20, "Contrast:", #PB_Text_Right)
TextGadget(3, 650, 75, 60, 20, "Gamma:", #PB_Text_Right)
TextGadget(4, 650, 100, 60, 20, "Saturation:", #PB_Text_Right)
TextGadget(5, 650, 125, 60, 20, "Hue:", #PB_Text_Right)
TextGadget(6, 650, 150, 60, 20, "Sharpness:", #PB_Text_Right)
TextGadget(7, 650, 175, 60, 20, "Exposure:", #PB_Text_Right)
SpinGadget(8, 715, 20, 50, 20, MinBrightness, MaxBrightness, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
SetGadgetState(8, DefBrightness) : SetGadgetColor(8, #PB_Gadget_BackColor, $F0F0F0)
SpinGadget(9, 715, 45, 50, 20, MinContrast, MaxContrast, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
SetGadgetState(9, DefContrast) : SetGadgetColor(9, #PB_Gadget_BackColor, $F0F0F0)
SpinGadget(10, 715, 70, 50, 20, MinGamma, MaxGamma, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
SetGadgetState(10, DefGamma) : SetGadgetColor(10, #PB_Gadget_BackColor, $F0F0F0)
SpinGadget(11, 715, 95, 50, 20, MinSaturation, MaxSaturation, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
SetGadgetState(11, DefSaturation) : SetGadgetColor(11, #PB_Gadget_BackColor, $F0F0F0)
SpinGadget(12, 715, 120, 50, 20, MinHue, MaxHue, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
SetGadgetState(12, DefHue) : SetGadgetColor(12, #PB_Gadget_BackColor, $F0F0F0)
SpinGadget(13, 715, 145, 50, 20, MinSharpness, MaxSharpness, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
SetGadgetState(13, DefSharpness) : SetGadgetColor(13, #PB_Gadget_BackColor, $F0F0F0)
SpinGadget(14, 715, 170, 50, 20, MinExposure, MaxExposure, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
SetGadgetState(14, DefExposure) : SetGadgetColor(14, #PB_Gadget_BackColor, $F0F0F0)
If CreatePopupImageMenu(0, #PB_Menu_ModernLook)
MenuItem(10, "Exit")
EndIf
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 10)
ToolTip(GadgetID(0), #CV_DESCRIPTION)
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_RightClick : DisplayPopupMenu(0, WindowID(0))
EndSelect
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 10 : Break
EndSelect
Case #PB_Event_CloseWindow : Break
Default
*image = cvQueryFrame(*capture)
If *image
cvFlip(*image, #Null, 1)
OpenCV2PBImage(*image, pbImage, FrameWidth, FrameHeight)
SetGadgetState(0, ImageID(pbImage))
EndIf
EndSelect
ForEver
EndIf
FreeImage(pbImage)
ClosePreferences()
cvReleaseCapture(@*capture)
Else
MessageRequester(#CV_WINDOW_NAME, "Unable to connect webcam - operation cancelled.", #MB_ICONERROR)
EndIf