Hi, JHPJHP.
My webcam's abilities are:
Code:
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 176x144
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 960x720
Interval: Discrete 0.033s (30.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 1280x720
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 176x144
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.050s (20.000 fps)
Size: Discrete 960x720
Interval: Discrete 0.067s (15.000 fps)
I changed IplImage to PBImage conversion procedure.
Now the example works fine for me.
Code:
#CV_CAP_ANY = 0
#CV_CAP_PROP_FRAME_WIDTH = 3
#CV_CAP_PROP_FRAME_HEIGHT = 4
#IPL_DEPTH_8U = 8
#CV_RGB2GRAY = 7
Enumeration
#MainWindow
#WebcamImage
#CatchedImgID
EndEnumeration
Structure CvCapture Align #PB_Structure_AlignC : EndStructure
Structure IplImage Align #PB_Structure_AlignC
nSize.l
ID.l
nChannels.l
alphaChannel.l
depth.l
colorModel.a[4]
channelSeq.a[4]
dataOrder.l
origin.l
align.l
width.l
height.l
*roi.IplROI
*maskROI.IplImage
*imageId
*tileInfo.IplTileInfo
imageSize.l
*imageData.BYTE
widthStep.l
BorderMode.l[4]
BorderConst.l[4]
*imageDataOrigin.BYTE
EndStructure
Structure Pointer
b.a
EndStructure
Structure CvMat Align #PB_Structure_AlignC
type.l
Step.l
*refcount.LONG
hdr_refcount.l
StructureUnion
*ptr.BYTE
*s.WORD
*i.LONG
*fl.FLOAT
*db.DOUBLE
EndStructureUnion
rows.l
cols.l
EndStructure
ImportC "binaries/libopencv_core.so.2.4.13"
cvCreateImage(*size, depth, channels)
cvFlip(*src, *dst, flip_mode)
cvReleaseImage(*image)
cvReleaseMat(*mat)
EndImport
ImportC "binaries/libopencv_highgui.so.2.4.13"
cvCreateCameraCapture(index)
cvEncodeImage(ext.p-ascii, *image, *params)
cvGetCaptureProperty.d(*capture, property_id)
cvQueryFrame(*capture)
cvReleaseCapture(*capture)
cvSetCaptureProperty(*capture, property_id, value.d)
cvShowImage(name.p-ascii, *image)
cvWaitKey(delay)
EndImport
ImportC "binaries/libopencv_imgproc.so.2.4.13"
cvCvtColor(*src, *dst, code, dstCn)
EndImport
ImportC ""
gtk_widget_get_toplevel(*widget.GtkWidget)
gtk_window_set_icon_from_file(*window.GtkWindow, icon.p-utf8, error)
EndImport
Repeat
nCreate + 1
*capture.CvCapture = cvCreateCameraCapture(#CV_CAP_ANY)
Until nCreate = 5 Or *capture
If *capture
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
cvSetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_WIDTH, FrameWidth)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_HEIGHT, FrameHeight)
*image.IplImage : PokeL(@*size, FrameWidth) : PokeL(@*size + 4, FrameHeight)
*gray.IplImage = cvCreateImage(*size, #IPL_DEPTH_8U, 1)
pbImage = CreateImage(#PB_Any, FrameWidth, FrameHeight)
*mat.CvMat
If OpenWindow(#MainWindow, 0, 0, FrameWidth, FrameHeight, "PureBasic Interface to OpenCV", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
*window = gtk_widget_get_toplevel(WindowID(#MainWindow))
gtk_window_set_icon_from_file(*window, "binaries/icons/opencv.png", #Null)
ImageGadget(#WebcamImage, 0, 0, FrameWidth, FrameHeight, #Null)
GadgetToolTip(#WebcamImage, "Double-click to toggle between color and grayscale")
Repeat
*image = cvQueryFrame(*capture)
If *image
If nGray
cvCvtColor(*image, *gray, #CV_RGB2GRAY, 1)
*mat = cvEncodeImage(".bmp", *gray, 0)
Else
*mat = cvEncodeImage(".bmp", *image, 0)
EndIf
CatchImage(#CatchedImgID, *mat\ptr)
SetGadgetState(#WebcamImage, ImageID(#CatchedImgID))
FreeImage(#CatchedImgID)
cvReleaseMat(@*mat)
cvWaitKey(50)
EndIf
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #WebcamImage
Select EventType()
Case #PB_EventType_LeftDoubleClick
nGray ! #True
EndSelect
EndSelect
Case #PB_Event_CloseWindow : Break
EndSelect
ForEver
EndIf
FreeImage(pbImage)
cvReleaseImage(@*gray)
cvReleaseCapture(@*capture)
Else
MessageRequester("PureBasic Interface to OpenCV", "Unable to connect to a webcam - operation cancelled.")
EndIf
The webcam mode is:
Code:
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YUYV'
Field : None
Bytes per Line : 1280
Size Image : 614400
Colorspace : sRGB
Transfer Function : Default
YCbCr Encoding : Default
Quantization : Default
Flags
When i configured the webcam's resolution 1280*720
Code:
FrameWidth = 1280
FrameHeight = 720
cvSetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_WIDTH, FrameWidth)
cvSetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_HEIGHT, FrameHeight)
it works in MJPG mode:
Code:
Format Video Capture:
Width/Height : 1280/720
Pixel Format : 'MJPG'
Field : None
Bytes per Line : 0
Size Image : 1843789
Colorspace : Default
Transfer Function : Default
YCbCr Encoding : Default
Quantization : Default
Flags