- added 1 example
-- cv_pixel_spread.pb: apply a pixel spread effect to an image
NB*: Press the Spacebar to animate the pixel spread.

Code: Select all
*image.IplImage = cvLoadImage(ImageFile, #CV_LOAD_IMAGE_ANYCOLOR | #CV_LOAD_IMAGE_ANYDEPTH) ;#CV_LOAD_IMAGE_GRAYSCALE)
Code: Select all
cvCalcHist(@*clone, *histogram, #False, #Null)
Code: Select all
IncludeFile "includes/cv_functions.pbi"
Global openCV, *save.IplImage, exitCV, lpPrevWndFunc, nBrightness, nContrast, Dim lut.b(256)
#CV_WINDOW_NAME = "PureBasic Interface to OpenCV"
#CV_DESCRIPTION = "Calculates a histogram based on brightness and contrast levels." + #LF$ + #LF$ +
"- TRACKBAR 1: Adjust the brightness." + #LF$ + #LF$ +
"- TRACKBAR 2: Adjust the contrast."
Procedure WindowCallback(hWnd, Msg, wParam, lParam)
Select Msg
Case #WM_COMMAND
Select wParam
Case 1
openCV = #True
keybd_event_(#VK_ESCAPE, 0, 0, 0)
Case 2
FileName.s = SaveCVImage()
If FileName
params.SAVE_INFO
Select LCase(GetExtensionPart(FileName))
Case "bmp", "dib"
Case "jpeg", "jpg", "jpe"
params\paramId = #CV_IMWRITE_JPEG_QUALITY
params\paramValue = 95
Case "jp2"
Case "png"
params\paramId = #CV_IMWRITE_PNG_COMPRESSION
params\paramValue = 3
Case "ppm", "pgm", "pbm"
params\paramId = #CV_IMWRITE_PXM_BINARY
params\paramValue = 1
Case "sr", "ras"
Case "tiff", "tif"
Default
Select SelectedFilePattern()
Case 0
FileName + ".bmp"
Case 1
FileName + ".jpg"
params\paramId = #CV_IMWRITE_JPEG_QUALITY
params\paramValue = 95
Case 2
FileName + ".jp2"
Case 3
FileName + ".png"
params\paramId = #CV_IMWRITE_PNG_COMPRESSION
params\paramValue = 3
Case 4
FileName + ".ppm"
params\paramId = #CV_IMWRITE_PXM_BINARY
params\paramValue = 1
Case 5
FileName + ".sr"
Case 6
FileName + ".tiff"
EndSelect
EndSelect
cvSaveImage(FileName, *save, @params)
EndIf
Case 10
keybd_event_(#VK_ESCAPE, 0, 0, 0)
EndSelect
Case #WM_DESTROY
exitCV = #True
EndSelect
ProcedureReturn CallWindowProc_(lpPrevWndFunc, hWnd, Msg, wParam, lParam)
EndProcedure
ProcedureC CvMouseCallback(event, x.l, y.l, flags, *param.USER_INFO)
Select event
Case #CV_EVENT_RBUTTONDOWN
*save = *param\uPointer1
DisplayPopupMenu(0, *param\uValue)
EndSelect
EndProcedure
Procedure UpdateBrightnessContrast()
Dim lut.b(256)
brightness = nBrightness - 100
contrast = nContrast - 100
If contrast > 0
delta.d = 127 * contrast / 100
a.d = 255 / (255 - delta * 2)
b.d = a * (brightness - delta)
Else
delta.d = -128 * contrast / 100
a.d = (256 - delta * 2) / 255
b.d = a * brightness + delta
EndIf
For i = 0 To 256 - 1
v = Round(a * i + b, #PB_Round_Nearest)
If v < 0 : v = 0 : EndIf
If v > 255 : v = 255 : EndIf
lut(i) = v
Next
EndProcedure
ProcedureC CvTrackbarCallback1(pos)
nBrightness = pos
UpdateBrightnessContrast()
keybd_event_(#VK_RETURN, 0, 0, 0)
EndProcedure
ProcedureC CvTrackbarCallback2(pos)
nContrast = pos
UpdateBrightnessContrast()
keybd_event_(#VK_RETURN, 0, 0, 0)
EndProcedure
Procedure OpenCV(ImageFile.s)
If FileSize(ImageFile) > 0
cvNamedWindow(#CV_WINDOW_NAME, #CV_WINDOW_AUTOSIZE)
window_handle = cvGetWindowHandle(#CV_WINDOW_NAME)
*window_name = cvGetWindowName(window_handle)
lpPrevWndFunc = SetWindowLongPtr_(window_handle, #GWL_WNDPROC, @WindowCallback())
If CreatePopupImageMenu(0, #PB_Menu_ModernLook)
MenuItem(1, "Open")
MenuBar()
MenuItem(2, "Save")
MenuBar()
MenuItem(10, "Exit")
EndIf
hWnd = GetParent_(window_handle)
iconCV = LoadImage_(GetModuleHandle_(0), @"icons/opencv.ico", #IMAGE_ICON, 35, 32, #LR_LOADFROMFILE)
SendMessage_(hWnd, #WM_SETICON, 0, iconCV)
wStyle = GetWindowLongPtr_(hWnd, #GWL_STYLE)
SetWindowLongPtr_(hWnd, #GWL_STYLE, wStyle & ~(#WS_MAXIMIZEBOX | #WS_MINIMIZEBOX | #WS_SIZEBOX))
Debug "OK0"
*image.IplImage = cvLoadImage(ImageFile, #CV_LOAD_IMAGE_GRAYSCALE);#CV_LOAD_IMAGE_ANYCOLOR );| #CV_LOAD_IMAGE_ANYDEPTH);, #CV_LOAD_IMAGE_GRAYSCALE)
Debug "OK1"
dtWidth = DesktopWidth(0)
dtHeight = DesktopHeight(0)
If *image\width >= dtWidth - 100 Or *image\height >= dtHeight - (100 + 48 + 42)
iWidth = dtWidth - 100
iRatio1.d = iWidth / *image\width
iHeight = dtHeight - (100 + 48 + 42)
iRatio2.d = iHeight / (*image\height)
If iRatio1 < iRatio2
iWidth = *image\width * iRatio1
iHeight = *image\height * iRatio1
Else
iWidth = *image\width * iRatio2
iHeight = *image\height * iRatio2
EndIf
cvResizeWindow(#CV_WINDOW_NAME, iWidth, iHeight + 48 + 42)
PokeL(@*size, iWidth) : PokeL(@*size + 4, iHeight)
*resize.IplImage = cvCreateImage(*size, #IPL_DEPTH_8U, *image\nChannels)
cvResize(*image, *resize, #CV_INTER_AREA)
Else
cvResizeWindow(#CV_WINDOW_NAME, *image\width, *image\height + 48 + 42)
*resize.IplImage = cvCloneImage(*image)
EndIf
cvMoveWindow(#CV_WINDOW_NAME, 20, 20)
ToolTip(window_handle, #CV_DESCRIPTION)
Debug "OK2"
If *resize\width > 200 And *resize\height > 200
nBrightness = 100 : nContrast = 100
cvCreateTrackbar("Brightness", #CV_WINDOW_NAME, @nBrightness, 201, @CvTrackbarCallback1())
cvCreateTrackbar("Contrast", #CV_WINDOW_NAME, @nContrast, 201, @CvTrackbarCallback2())
*clone.IplImage = cvCloneImage(*resize)
PokeL(@*size, 193) : PokeL(@*size + 4, 100)
*hist.IplImage = cvCreateImage(*size, #IPL_DEPTH_8U, 1)
cvGetSize(@*get_size, *resize)
*gray.IplImage = cvCreateImage(*get_size, #IPL_DEPTH_8U, 1)
*color.IplImage = cvCreateImage(*get_size, #IPL_DEPTH_8U, 3)
*lut = cvCreateMatHeader(1, 256, CV_MAKETYPE(#CV_8U, 1))
bins = 64 : Dim range.f(2) : range(0) = 0 : range(1) = 256
*ranges.FLOAT : PokeL(@*ranges, @range())
*histogram.CvHistogram = cvCreateHist(1, @bins, #CV_HIST_ARRAY, @*ranges, #True)
cvSetData(*lut, @lut(), 0)
UpdateBrightnessContrast()
*param.USER_INFO = AllocateMemory(SizeOf(USER_INFO))
*param\uPointer1 = *gray
*param\uValue = window_handle
cvSetMouseCallback(*window_name, @CvMouseCallback(), *param)
color1.CvScalar : color1\val[0] = 0 : color1\val[1] = 0 : color1\val[2] = 0 : color1\val[3] = 0
color2.CvScalar : color2\val[0] = 0 : color2\val[1] = 255 : color2\val[2] = 255 : color2\val[3] = 0
value1.CvScalar : value1\val[0] = 255 : value1\val[1] = 255 : value1\val[2] = 255 : value1\val[3] = 0
value2.CvScalar : value2\val[0] = 0 : value2\val[1] = 0 : value2\val[2] = 0 : value2\val[3] = 0
rect.CvRect : rect\x = 20 : rect\y = 20 : rect\width = 193 : rect\height = 100
r.CvRect : r\x = 19 : r\y = 19 : r\width = 193 + 2 : r\height = 100 + 2
Debug "OK3"
Repeat
If *resize
cvSetZero(*clone)
Debug "OK4"
cvLUT(*resize, *clone, *lut)
Debug "OK5"
cvCalcHist(@*clone, *histogram, #False, #Null)
Debug "OK6"
cvGetMinMaxHistValue(*histogram, #Null, @max_value.f, #Null, #Null)
Debug "OK7"
cvConvertScale(*histogram\bins, *histogram\bins, *hist\height / max_value, 0)
Debug "OK8"
cvSet(*hist, @value1, #Null)
bin = Round(*hist\width / bins, #PB_Round_Nearest)
For i = 0 To bins - 1
x1 = i * bin
y1 = *hist\height
x2 = (i + 1) * bin
y2 = *hist\height - Round(cvGetReal1D(*histogram\bins, i), #PB_Round_Nearest)
PokeL(@*pt1, x1) : PokeL(@*pt1 + 4, y1)
PokeL(@*pt2, x2) : PokeL(@*pt2 + 4, y2)
cvRectangle(*hist, *pt1, *pt2, @color1, #CV_FILLED, #CV_AA, #Null)
Next
cvCopy(*clone, *gray, #Null)
cvSetImageROI(*gray, @rect)
cvAndS(*gray, @value2, *gray, #Null)
cvAdd(*gray, *hist, *gray, #Null)
cvResetImageROI(*gray)
cvCvtColor(*gray, *color, #CV_GRAY2BGR, 1)
cvRectangleR(*color, @r, @color2, 2, #CV_AA, #Null)
cvShowImage(#CV_WINDOW_NAME, *color)
keyPressed = cvWaitKey(0)
EndIf
Until keyPressed = 27 Or exitCV
FreeMemory(*param)
cvReleaseImage(@*resize)
cvReleaseImage(@*image)
cvDestroyAllWindows()
If openCV
openCV = #False
exitCV = #False
OpenCV(OpenCVImage())
EndIf
Else
MessageRequester(#CV_WINDOW_NAME, ImageFile + #LF$ + #LF$ + "... does not meet the size requirements, please try another image.", #MB_ICONERROR)
cvReleaseHist(@*histogram)
cvReleaseMat(@*lut)
cvReleaseImage(@*color)
cvReleaseImage(@*gray)
cvReleaseImage(@*hist)
cvReleaseImage(@*clone)
cvReleaseImage(@*resize)
cvReleaseImage(@*image)
cvDestroyAllWindows()
exitCV = #False
OpenCV(OpenCVImage())
EndIf
EndIf
EndProcedure
ExamineDesktops()
OpenCV("images/building.jpg")
Code: Select all
ImportC "libtesseract302.lib"
...
TessBaseAPIClearAdaptiveClassifier(*TessBaseAPI)
...
Code: Select all
Procedure GetConfidence(*confidence.IplImage, hApi, iLevel)
....
threshold.d = cvThreshold(*gray, *bin, 10, 255, #CV_THRESH_OTSU)
TessBaseAPIClearAdaptiveClassifier(hAPI)
TessBaseAPISetImage(hApi, *bin\imageData, *bin\width, *bin\height, 1, *bin\widthStep)
...
Code: Select all
IncludeFile "includes/cv_functions.pbi"
Global lpPrevWndFunc
#CV_WINDOW_NAME = "PureBasic Interface to OpenCV"
#CV_DESCRIPTION = "Contrast-detect based focusing." + #LF$
#SensorWidth = 50
#SensorHeight = 50
Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
Shared exitCV
Select uMsg
Case #WM_COMMAND
Select wParam
Case 10
exitCV = #True
EndSelect
Case #WM_DESTROY
exitCV = #True
EndSelect
ProcedureReturn CallWindowProc_(lpPrevWndFunc, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure CvMouseCallback(event, x.l, y.l, flags, *param.CvUserData)
Select event
Case #CV_EVENT_RBUTTONDOWN
DisplayPopupMenu(0, *param\Value)
EndSelect
EndProcedure
Repeat
nCreate + 1
*capture.CvCapture = cvCreateCameraCapture(#CV_CAP_ANY)
Until nCreate = 5 Or *capture
If *capture
cvNamedWindow(#CV_WINDOW_NAME, #CV_WINDOW_AUTOSIZE)
window_handle = cvGetWindowHandle(#CV_WINDOW_NAME)
*window_name = cvGetWindowName(window_handle)
lpPrevWndFunc = SetWindowLongPtr_(window_handle, #GWL_WNDPROC, @WindowCallback())
If CreatePopupImageMenu(0, #PB_Menu_ModernLook)
MenuItem(10, "Exit")
EndIf
hWnd = GetParent_(window_handle)
iconCV = LoadImage_(GetModuleHandle_(0), @"icons/opencv.ico", #IMAGE_ICON, 35, 32, #LR_LOADFROMFILE)
SendMessage_(hWnd, #WM_SETICON, 0, iconCV)
wStyle = GetWindowLongPtr_(hWnd, #GWL_STYLE)
SetWindowLongPtr_(hWnd, #GWL_STYLE, wStyle & ~(#WS_MAXIMIZEBOX | #WS_MINIMIZEBOX | #WS_SIZEBOX))
FrameWidth = cvGetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_WIDTH)
FrameHeight = cvGetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_HEIGHT)
cvMoveWindow(#CV_WINDOW_NAME, 20, 20)
ToolTip(window_handle, #CV_DESCRIPTION)
*image.IplImage
*contrsqColor.IplImage = cvCreateImage(#SensorWidth, #SensorHeight, #IPL_DEPTH_8U, 3)
*contrsqGray.IplImage = cvCreateImage(#SensorWidth, #SensorHeight, #IPL_DEPTH_8U, 1)
*contrsqSobel.IplImage = cvCreateImage(#SensorWidth, #SensorHeight, #IPL_DEPTH_8U, 1)
Dim med(3)
For i = 0 To 3
med(i) = 0
Next
*param.CvUserData = AllocateMemory(SizeOf(CvUserData))
*param\Value = window_handle
cvSetMouseCallback(*window_name, @CvMouseCallback(), *param)
Repeat
*image = cvQueryFrame(*capture)
If *image
framecntr.a + 1
If (framecntr%4) = 1
cvSetImageROI(*image, *image\width/2-#SensorWidth/2, *image\height/2-#SensorHeight/2, #SensorWidth, #SensorHeight)
cvCopy(*image, *contrsqColor, #Null)
cvCvtColor(*contrsqColor, *contrsqGray, #CV_BGR2GRAY, 1)
cvResetImageROI(*image)
cvSmooth(*contrsqGray, *contrsqGray, #CV_GAUSSIAN, 3, 0, 0, 0)
cvSobel(*contrsqGray, *contrsqSobel, 1, 1, 3)
contrastMax = 0
For x = 0 To *contrsqSobel\width - 1
For y = 0 To *contrsqSobel\height - 1
contrpic = PeekA(@*contrsqSobel\imagedata\b + y * *contrsqSobel\widthStep + x)
If contrpic > contrastMax
contrastMax = contrpic
EndIf
Next Y
Next X
wrptr + 1
If wrptr > 3
wrptr = 0
EndIf
med(wrptr) = contrastMax
contrastMax = 0
For i = 0 To 3
contrastMax + med(i)
Next
contrastMax/4
EndIf
cvRectangle(*image, *image\width/2-#SensorWidth/2, *image\height/2-#SensorHeight/2, *image\width/2+#SensorWidth/2, *image\height/2+#SensorHeight/2, 0, 250, 250, 0, 1, #CV_AA, 0)
cvRectangle(*image, 10, *image\height-265, 30, *image\height-10, 0, 0, 0, 0, #CV_FILLED, #CV_AA, #Null)
cvRectangle(*image, 10, *image\height-10-contrastMax, 30, *image\height-10, 0, 250, 250, 0, #CV_FILLED, #CV_AA, #Null)
cvShowImage(#CV_WINDOW_NAME, *image)
keyPressed = cvWaitKey(1)
EndIf
Until keyPressed = 27 Or exitCV
FreeMemory(*param)
cvDestroyAllWindows()
cvReleaseCapture(@*capture)
Else
MessageRequester(#CV_WINDOW_NAME, "Unable to connect webcam - operation cancelled.", #MB_ICONERROR)
EndIf