Overview
The opencv package provides PascalAI bindings to OpenCV, the world's most popular computer vision library. It covers image I/O, geometric transforms, filters, edge and face detection, drawing primitives, and basic video capture.
CLib package
Requires libopencv-dev (Ubuntu/Debian: sudo apt install libopencv-dev)
and the PPM native bridge library libpai_opencv.so, installed automatically by ppm install opencv.
Quick Start
uses opencv;
var img := LoadImage('/photos/portrait.jpg');
var w, h: Integer;
ImageSize(img, w, h);
WriteLn('Size: ', w, 'x', h);
// Resize and detect faces
var thumb := FitImage(img, 640);
var result := DrawFaces(thumb);
SaveImage('/out/annotated.jpg', result);
FreeImage(img);
FreeImage(thumb);
FreeImage(result);
Image I/O
var img := LoadImage('/path/to/photo.jpg'); // PNG, JPG, BMP, TIFF...
SaveImage('/path/to/out.png', img);
var b64 := ImageToBase64(img); // data URI ready
var w, h: Integer;
ImageSize(img, w, h);
FreeImage(img); // always release
Transforms
var resized := Resize(img, 800, 600);
var cropped := Crop(img, 10, 10, 200, 200);
var rotated := Rotate(img, 45.0); // degrees
var flipped := Flip(img, 1); // 1=horizontal
var gray := ToGrayscale(img);
var fit := FitImage(img, 512); // longest edge = 512
Filters
var blurred := Blur(img, 5); // kernel size (odd)
var smooth := GaussianBlur(img, 7, 1.5);
var sharp := Sharpen(img, 1.2);
var bright := AdjustBrightnessContrast(img, 30, 1.2);
Detection
// Canny edge detection
var edges := EdgeDetect(img, 50.0, 150.0);
SaveImage('/out/edges.png', edges);
// Face detection
var faces := FaceDetect(img);
WriteLn(Length(faces), ' face(s) found');
var annotated := DrawFaces(img);
// Hough circle detection
var circles := DetectCircles(img, 20, 200);
Drawing
var Red := RGB(255, 0, 0);
var Green := RGB(0, 255, 0);
var Blue := RGB(0, 0, 255);
DrawRect(img, 10, 10, 100, 50, Red, 2); // x,y,w,h
DrawCircle(img, 200, 200, 40, Green, 2);
DrawLine(img, 0, 0, 400, 300, Blue, 1);
DrawText(img, 'Hello!', 20, 40, RGB(255,255,255), 1.5);
Video
var cap := VideoOpen('0'); // '0' = webcam; or path to .mp4
var fps := VideoGet(cap, 'fps');
WriteLn('FPS: ', fps:0:1);
var frame := VideoRead(cap);
while frame <> nil do begin
var gray := ToGrayscale(frame);
SaveImage('/tmp/frame.jpg', gray);
FreeImage(frame);
FreeImage(gray);
frame := VideoRead(cap);
end;
VideoClose(cap);