opencv clib Multimedia

OpenCV computer vision. LoadImage, Resize, Blur, EdgeDetect, FaceDetect, VideoCapture.

ppm install opencv

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);