I'm using Lazarus 3.9 on Ubuntu 22.04.5 LTS. I installed OpenCV version 4.5.4 using apt-get install libopencv-dev.
The code is as simple as:
unit OpenCVDisplayMain;
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, LCLType,
ctypes, LCLIntf, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
TSize = record
width, height: Integer;
end;
PSize = ^TSize;
var
Form1: TForm1;
implementation
{$R *.lfm}
function cv_imread(filename: PAnsiChar; flags: Integer): Pointer; cdecl; external 'libopencv_imgcodecs.so.4.5.4d';
function cv_GetSize(img: Pointer): PSize; cdecl; external 'libopencv_core.so.4.5';
procedure cv_releaseImage(img: PPointer); cdecl; external 'libopencv_core.so.4.5'; /
function cvCvtColor(src, dst: Pointer; code: Integer): Integer; cdecl; external 'libopencv_imgproc.so.4.5';
function cvCreateImage(size: PSize; depth: Integer; channels: Integer): Pointer; cdecl; external 'libopencv_core.so.4.5';
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
OpenCVImage, ConvertedImage: Pointer;
Size: PSize;
Filename: string;
OpenCVImagePtr: PPointer;
Bitmap: TBitmap;
begin
Filename := 'test.jpg';
OpenCVImage := cv_imread(PAnsiChar(AnsiString(Filename)), 1);
if OpenCVImage <> nil then
begin
Size := cv_GetSize(OpenCVImage);
ConvertedImage := cvCreateImage(Size, 8, 3); // 8 bits per channel, 3 channels (BGR)
cvCvtColor(OpenCVImage, ConvertedImage, 6); // COLOR_BGR2BGR = 6
Bitmap := TBitmap.Create;
try
Bitmap.PixelFormat := pf24bit;
Bitmap.Width := Size^.width;
Bitmap.Height := Size^.height;
Move(Pointer(ConvertedImage)^, Bitmap.ScanLine[0]^, Bitmap.Width * Bitmap.Height * 3);
Image1.Picture.Assign(Bitmap);
finally
Bitmap.Free;
end;
OpenCVImagePtr := @OpenCVImage;
cv_releaseImage(OpenCVImagePtr);
OpenCVImagePtr := @ConvertedImage;
cv_releaseImage(OpenCVImagePtr);
end else
ShowMessage('Failed to load image: ' + Filename);
end;
end.
However, I keep getting the following compile-time error: Error: opencvdisplaymain.pas:(.text.n_opencvdisplaymain$_$tform1_$__$$_formcreate$tobject+0x7e): undefined reference to \cv_imread'`.
I've already tried asking AI for help, but haven't been able to resolve the issue. Does anyone have experience with this?
『
ls /usr/lib/x86_64-linux-gnu/ | grep libopencv_imgcodecs
libopencv_imgcodecs.a
libopencv_imgcodecs.so
libopencv_imgcodecs.so.4.5.4d
libopencv_imgcodecs.so.4.5d
』