mirror of
https://github.com/Laex/Delphi-OpenCV.git
synced 2024-11-15 07:45:53 +01:00
Added VCL example - Color Detection & Object Tracking
[*] samples/MultiDemo/vclColorTracking/vclColorTracking.dpr Signed-off-by: Laex <laex@bk.ru>
This commit is contained in:
parent
02df08bd88
commit
7028df699a
@ -2,7 +2,7 @@
|
||||
// Project Delphi-OpenCV
|
||||
// **************************************************************************************************
|
||||
// Contributor:
|
||||
// laentir Valetov
|
||||
// Laentir Valetov
|
||||
// email:laex@bk.ru
|
||||
// **************************************************************************************************
|
||||
// You may retrieve the latest version of this file at the GitHub,
|
||||
@ -29,7 +29,7 @@
|
||||
//
|
||||
// For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html
|
||||
// **************************************************************************************************
|
||||
// Warning: Using Delphi XE3 syntax!
|
||||
// Warning: Using Delphi XE2 syntax!
|
||||
// **************************************************************************************************
|
||||
// The Initial Developer of the Original Code:
|
||||
// OpenCV: open source computer vision library
|
||||
@ -44,18 +44,30 @@ unit cvUtils;
|
||||
|
||||
interface
|
||||
|
||||
Uses WinApi.Windows, core.types_c, Vcl.Graphics;
|
||||
Uses
|
||||
WinApi.Windows,
|
||||
core.types_c,
|
||||
Vcl.Graphics;
|
||||
|
||||
Function hsv2rgb(hue: single): TCvScalar;
|
||||
procedure IplImage2Bitmap(iplImg: PIplImage; var bitmap: Vcl.Graphics.TBitmap);
|
||||
procedure IplImage2Bitmap(
|
||||
iplImg: PIplImage;
|
||||
var bitmap: Vcl.Graphics.TBitmap);
|
||||
|
||||
function cvImage2Bitmap(img: PIplImage): Vcl.Graphics.TBitmap;
|
||||
function ipDraw(dc: HDC; img: PIplImage; const rect: TRect; const Stretch: Boolean = true): Boolean;
|
||||
|
||||
function ipDraw(
|
||||
dc: HDC;
|
||||
img: PIplImage;
|
||||
const rect: TRect;
|
||||
const Stretch: Boolean = true): Boolean;
|
||||
|
||||
function c_str(const Text: String): pCVChar;
|
||||
|
||||
implementation
|
||||
|
||||
Uses System.SysUtils;
|
||||
Uses
|
||||
System.SysUtils;
|
||||
|
||||
function c_str(const Text: String): pCVChar;
|
||||
begin
|
||||
@ -64,14 +76,14 @@ end;
|
||||
|
||||
Function hsv2rgb(hue: single): TCvScalar;
|
||||
var
|
||||
rgb: array [0 .. 2] of Integer;
|
||||
rgb : array [0 .. 2] of Integer;
|
||||
p, sector: Integer;
|
||||
const
|
||||
sector_data: array [0 .. 5, 0 .. 2] of Integer = ((0, 2, 1), (1, 2, 0), (1, 0, 2), (2, 0, 1), (2, 1, 0), (0, 1, 2));
|
||||
Begin
|
||||
hue := hue * 0.033333333333333333333333333333333;
|
||||
hue := hue * 0.033333333333333333333333333333333;
|
||||
sector := cvFloor(hue);
|
||||
p := cvRound(255 * (hue - sector));
|
||||
p := cvRound(255 * (hue - sector));
|
||||
if (sector and 1) = 1 then
|
||||
p := 255
|
||||
else
|
||||
@ -81,7 +93,11 @@ Begin
|
||||
rgb[sector_data[sector][1]] := 0;
|
||||
rgb[sector_data[sector][2]] := p;
|
||||
|
||||
Result := cvScalar(rgb[2], rgb[1], rgb[0], 0);
|
||||
Result := cvScalar(
|
||||
rgb[2],
|
||||
rgb[1],
|
||||
rgb[0],
|
||||
0);
|
||||
End;
|
||||
|
||||
{ -----------------------------------------------------------------------------
|
||||
@ -91,19 +107,21 @@ End;
|
||||
Arguments: iplImg: PIplImage; bitmap: TBitmap
|
||||
Description: convert a IplImage to a Windows bitmap
|
||||
----------------------------------------------------------------------------- }
|
||||
procedure IplImage2Bitmap(iplImg: PIplImage; var bitmap: Vcl.Graphics.TBitmap);
|
||||
procedure IplImage2Bitmap(
|
||||
iplImg: PIplImage;
|
||||
var bitmap: Vcl.Graphics.TBitmap);
|
||||
VAR
|
||||
i, j: Integer;
|
||||
offset: longint;
|
||||
i, j : Integer;
|
||||
offset : longint;
|
||||
dataByte, RowIn: PByteArray;
|
||||
channelsCount: Integer;
|
||||
channelsCount : Integer;
|
||||
BEGIN
|
||||
TRY
|
||||
// assert((iplImg.Depth = 8) and (iplImg.NChannels = 3),
|
||||
// 'IplImage2Bitmap: Not a 24 bit color iplImage!');
|
||||
bitmap.Height := iplImg.Height;
|
||||
bitmap.Width := iplImg.Width;
|
||||
FOR j := 0 TO bitmap.Height - 1 DO
|
||||
bitmap.Width := iplImg.Width;
|
||||
FOR j := 0 TO bitmap.Height - 1 DO
|
||||
BEGIN
|
||||
// origin BL = Bottom-Left
|
||||
if (iplImg.Origin = IPL_ORIGIN_BL) then
|
||||
@ -111,25 +129,28 @@ BEGIN
|
||||
else
|
||||
RowIn := bitmap.Scanline[j];
|
||||
|
||||
offset := longint(iplImg.ImageData) + iplImg.WidthStep * j;
|
||||
offset := longint(iplImg.ImageData) + iplImg.WidthStep * j;
|
||||
dataByte := PByteArray(offset);
|
||||
|
||||
if (iplImg.ChannelSeq = 'BGR') then
|
||||
begin
|
||||
{ direct copy of the iplImage row bytes to bitmap row }
|
||||
CopyMemory(RowIn, dataByte, iplImg.WidthStep);
|
||||
CopyMemory(
|
||||
RowIn,
|
||||
dataByte,
|
||||
iplImg.WidthStep);
|
||||
End
|
||||
else if (iplImg.ChannelSeq = 'GRAY') then
|
||||
FOR i := 0 TO bitmap.Width - 1 DO
|
||||
begin
|
||||
RowIn[3 * i] := dataByte[i];
|
||||
RowIn[3 * i] := dataByte[i];
|
||||
RowIn[3 * i + 1] := dataByte[i];
|
||||
RowIn[3 * i + 2] := dataByte[i];
|
||||
End
|
||||
else
|
||||
FOR i := 0 TO 3 * bitmap.Width - 1 DO
|
||||
begin
|
||||
RowIn[i] := dataByte[i + 2];
|
||||
RowIn[i] := dataByte[i + 2];
|
||||
RowIn[i + 1] := dataByte[i + 1];
|
||||
RowIn[i + 2] := dataByte[i];
|
||||
End;
|
||||
@ -140,20 +161,20 @@ END; { IplImage2Bitmap }
|
||||
|
||||
function cvImage2Bitmap(img: PIplImage): Vcl.Graphics.TBitmap;
|
||||
var
|
||||
info: string;
|
||||
bmp: Vcl.Graphics.TBitmap;
|
||||
deep: Integer;
|
||||
info : string;
|
||||
bmp : Vcl.Graphics.TBitmap;
|
||||
deep : Integer;
|
||||
i, j, K, wStep, Channels: Integer;
|
||||
data: PByteArray;
|
||||
pb: PByteArray;
|
||||
data : PByteArray;
|
||||
pb : PByteArray;
|
||||
begin
|
||||
Result := NIL;
|
||||
if (img <> NIL) then
|
||||
begin
|
||||
bmp := Vcl.Graphics.TBitmap.Create;
|
||||
bmp.Width := img^.Width;
|
||||
bmp := Vcl.Graphics.TBitmap.Create;
|
||||
bmp.Width := img^.Width;
|
||||
bmp.Height := img^.Height;
|
||||
deep := img^.nChannels * img^.depth;
|
||||
deep := img^.nChannels * img^.depth;
|
||||
case deep of
|
||||
8:
|
||||
bmp.PixelFormat := pf8bit;
|
||||
@ -164,15 +185,15 @@ begin
|
||||
32:
|
||||
bmp.PixelFormat := pf32bit;
|
||||
End;
|
||||
wStep := img^.WidthStep;
|
||||
wStep := img^.WidthStep;
|
||||
Channels := img^.nChannels;
|
||||
data := Pointer(img^.ImageData);
|
||||
for i := 0 to img^.Height - 1 do
|
||||
data := Pointer(img^.ImageData);
|
||||
for i := 0 to img^.Height - 1 do
|
||||
begin
|
||||
pb := bmp.Scanline[i];
|
||||
pb := bmp.Scanline[i];
|
||||
for j := 0 to img^.Width - 1 do
|
||||
begin
|
||||
for K := 0 to Channels - 1 do
|
||||
for K := 0 to Channels - 1 do
|
||||
pb[3 * j + K] := data[i * wStep + j * Channels + K]
|
||||
End;
|
||||
End;
|
||||
@ -181,20 +202,24 @@ begin
|
||||
End;
|
||||
end;
|
||||
|
||||
function ipDraw(dc: HDC; img: PIplImage; const rect: TRect; const Stretch: Boolean = true): Boolean;
|
||||
function ipDraw(
|
||||
dc: HDC;
|
||||
img: PIplImage;
|
||||
const rect: TRect;
|
||||
const Stretch: Boolean = true): Boolean;
|
||||
|
||||
Type
|
||||
pCOLORREF = ^COLORREF;
|
||||
pCOLORREF = ^COLORREF;
|
||||
pBITMAPINFOHEADER = ^BITMAPINFOHEADER;
|
||||
|
||||
Var
|
||||
isrgb: Boolean;
|
||||
isgray: Boolean;
|
||||
buf: array [1 .. sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256] of byte;
|
||||
dibhdr: pBITMAPINFOHEADER;
|
||||
isrgb : Boolean;
|
||||
isgray : Boolean;
|
||||
buf : array [1 .. sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256] of byte;
|
||||
dibhdr : pBITMAPINFOHEADER;
|
||||
_dibhdr: TBitmapInfo ABSOLUTE buf;
|
||||
_rgb: pCOLORREF;
|
||||
i: Integer;
|
||||
_rgb : pCOLORREF;
|
||||
i : Integer;
|
||||
begin
|
||||
if (not Assigned(img)) or (not Assigned(img^.ImageData)) then
|
||||
Exit(false);
|
||||
@ -207,12 +232,15 @@ begin
|
||||
Exit(false);
|
||||
|
||||
dibhdr := @buf;
|
||||
_rgb := pCOLORREF(Integer(dibhdr) + sizeof(BITMAPINFOHEADER));
|
||||
_rgb := pCOLORREF(Integer(dibhdr) + sizeof(BITMAPINFOHEADER));
|
||||
|
||||
if (isgray) then
|
||||
for i := 0 to 255 do
|
||||
_rgb[i] := rgb(i, i, i);
|
||||
dibhdr^.biSize := sizeof(BITMAPINFOHEADER);
|
||||
for i := 0 to 255 do
|
||||
_rgb[i] := rgb(
|
||||
i,
|
||||
i,
|
||||
i);
|
||||
dibhdr^.biSize := sizeof(BITMAPINFOHEADER);
|
||||
dibhdr^.biWidth := img^.Width;
|
||||
// Check origin for display
|
||||
if img^.Origin = 0 then
|
||||
@ -220,18 +248,20 @@ begin
|
||||
else
|
||||
dibhdr^.biHeight := img^.Height;
|
||||
|
||||
dibhdr^.biPlanes := 1;
|
||||
dibhdr^.biBitCount := 8 * img^.nChannels;
|
||||
dibhdr^.biCompression := BI_RGB;
|
||||
dibhdr^.biSizeImage := 0; // img^.imageSize;
|
||||
dibhdr^.biPlanes := 1;
|
||||
dibhdr^.biBitCount := 8 * img^.nChannels;
|
||||
dibhdr^.biCompression := BI_RGB;
|
||||
dibhdr^.biSizeImage := 0; // img^.imageSize;
|
||||
dibhdr^.biXPelsPerMeter := 0;
|
||||
dibhdr^.biYPelsPerMeter := 0;
|
||||
dibhdr^.biClrUsed := 0;
|
||||
dibhdr^.biClrImportant := 0;
|
||||
dibhdr^.biClrUsed := 0;
|
||||
dibhdr^.biClrImportant := 0;
|
||||
|
||||
if Stretch then
|
||||
begin
|
||||
SetStretchBltMode(dc, COLORONCOLOR);
|
||||
SetStretchBltMode(
|
||||
dc,
|
||||
COLORONCOLOR);
|
||||
// Stretch the image to fit the rectangle
|
||||
Result := StretchDIBits(dc, rect.left, rect.top, rect.Width, rect.Height, 0, 0, img^.Width, img^.Height,
|
||||
img^.ImageData, _dibhdr, DIB_RGB_COLORS, SRCCOPY) > 0;
|
||||
|
@ -41,7 +41,7 @@
|
||||
// Project Delphi-OpenCV
|
||||
// **************************************************************************************************
|
||||
// Contributor:
|
||||
// laentir Valetov
|
||||
// Laentir Valetov
|
||||
// email:laex@bk.ru
|
||||
// **************************************************************************************************
|
||||
// You may retrieve the latest version of this file at the GitHub,
|
||||
@ -68,7 +68,7 @@
|
||||
//
|
||||
// For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html
|
||||
// **************************************************************************************************
|
||||
// Warning: Using Delphi XE3 syntax!
|
||||
// Warning: Using Delphi XE2 syntax!
|
||||
// **************************************************************************************************
|
||||
// The Initial Developer of the Original Code:
|
||||
// OpenCV: open source computer vision library
|
||||
|
51
samples/MultiDemo/vclColorTracking/uMainForm.dfm
Normal file
51
samples/MultiDemo/vclColorTracking/uMainForm.dfm
Normal file
@ -0,0 +1,51 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 0
|
||||
Top = 0
|
||||
BorderIcons = [biSystemMenu, biMinimize]
|
||||
BorderStyle = bsSingle
|
||||
Caption = 'Color Detection & Object Tracking '
|
||||
ClientHeight = 342
|
||||
ClientWidth = 670
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
Position = poScreenCenter
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object pb1: TPaintBox
|
||||
Left = 8
|
||||
Top = 52
|
||||
Width = 325
|
||||
Height = 281
|
||||
end
|
||||
object pb2: TPaintBox
|
||||
Left = 339
|
||||
Top = 52
|
||||
Width = 325
|
||||
Height = 281
|
||||
end
|
||||
object rb1: TRadioButton
|
||||
Left = 8
|
||||
Top = 31
|
||||
Width = 165
|
||||
Height = 17
|
||||
Caption = 'Tracking Red objects'
|
||||
TabOrder = 1
|
||||
end
|
||||
object rb2: TRadioButton
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 165
|
||||
Height = 17
|
||||
Caption = 'Detecting Red objects'
|
||||
Checked = True
|
||||
TabOrder = 0
|
||||
TabStop = True
|
||||
end
|
||||
end
|
318
samples/MultiDemo/vclColorTracking/uMainForm.pas
Normal file
318
samples/MultiDemo/vclColorTracking/uMainForm.pas
Normal file
@ -0,0 +1,318 @@
|
||||
(* / **************************************************************************************************
|
||||
// Project Delphi-OpenCV
|
||||
// **************************************************************************************************
|
||||
// Contributor:
|
||||
// Laentir Valetov
|
||||
// email:laex@bk.ru
|
||||
// **************************************************************************************************
|
||||
// You may retrieve the latest version of this file at the GitHub,
|
||||
// located at git://github.com/Laex/Delphi-OpenCV.git
|
||||
// **************************************************************************************************
|
||||
// License:
|
||||
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
|
||||
// you may not use this file except in compliance with the License. You may obtain a copy of the
|
||||
// License at http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
|
||||
// ANY KIND, either express or implied. See the License for the specific language governing rights
|
||||
// and limitations under the License.
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of the
|
||||
// GNU Lesser General Public License (the "LGPL License"), in which case the
|
||||
// provisions of the LGPL License are applicable instead of those above.
|
||||
// If you wish to allow use of your version of this file only under the terms
|
||||
// of the LGPL License and not to allow others to use your version of this file
|
||||
// under the MPL, indicate your decision by deleting the provisions above and
|
||||
// replace them with the notice and other provisions required by the LGPL
|
||||
// License. If you do not delete the provisions above, a recipient may use
|
||||
// your version of this file under either the MPL or the LGPL License.
|
||||
//
|
||||
// For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html
|
||||
// **************************************************************************************************
|
||||
// Warning: Using Delphi XE2 syntax!
|
||||
// **************************************************************************************************
|
||||
// The Initial Developer of the Original Code:
|
||||
// OpenCV: open source computer vision library
|
||||
// Homepage: http://opencv.org
|
||||
// Online docs: http://docs.opencv.org
|
||||
// Q&A forum: http://answers.opencv.org
|
||||
// Dev zone: http://code.opencv.org
|
||||
// ************************************************************************************************** *)
|
||||
|
||||
unit uMainForm;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Winapi.Windows,
|
||||
Winapi.Messages,
|
||||
System.SysUtils,
|
||||
System.Variants,
|
||||
System.Classes,
|
||||
Vcl.Graphics,
|
||||
Vcl.Controls,
|
||||
Vcl.Forms,
|
||||
Vcl.Dialogs,
|
||||
highgui_c,
|
||||
core.types_c,
|
||||
Vcl.StdCtrls,
|
||||
Vcl.ExtCtrls;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
pb1: TPaintBox;
|
||||
pb2: TPaintBox;
|
||||
rb1: TRadioButton;
|
||||
rb2: TRadioButton;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
private
|
||||
capture : pCvCapture;
|
||||
lastX, lastY: Integer;
|
||||
imgTracking : pIplImage;
|
||||
procedure OnIdle(
|
||||
Sender: TObject;
|
||||
var Done: Boolean);
|
||||
procedure DetectingRedObjects(img: pIplImage);
|
||||
procedure TrackingRedObjects(img: pIplImage);
|
||||
procedure trackObject(imgThresh: pIplImage);
|
||||
public
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
Uses
|
||||
core_c,
|
||||
imgproc_c,
|
||||
imgproc.types_c,
|
||||
cvUtils;
|
||||
|
||||
procedure TMainForm.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
if Assigned(capture) then
|
||||
cvReleaseCapture(capture);
|
||||
if Assigned(imgTracking) then
|
||||
cvReleaseImage(imgTracking);
|
||||
end;
|
||||
|
||||
// This function threshold the HSV image and create a binary image
|
||||
function GetThresholdedImage(imgHSV: pIplImage): pIplImage;
|
||||
begin
|
||||
Result := cvCreateImage(
|
||||
cvGetSize(imgHSV),
|
||||
IPL_DEPTH_8U,
|
||||
1);
|
||||
|
||||
// Convet a video into a binary image based on the red color.
|
||||
// Red color area of the video is assined to '1' and other area is assigned to '0' in the binary image
|
||||
cvInRangeS(
|
||||
imgHSV,
|
||||
cvScalar(170, 160, 60),
|
||||
cvScalar(180, 256, 256),
|
||||
Result);
|
||||
end;
|
||||
|
||||
procedure TMainForm.DetectingRedObjects(img: pIplImage);
|
||||
Var
|
||||
imgHSV : pIplImage;
|
||||
imgThresh: pIplImage;
|
||||
frame : pIplImage;
|
||||
begin
|
||||
frame := cvCloneImage(img);
|
||||
|
||||
// smooth the original image using Gaussian kernel
|
||||
cvSmooth(
|
||||
frame,
|
||||
frame,
|
||||
CV_GAUSSIAN,
|
||||
3,
|
||||
3);
|
||||
|
||||
imgHSV := cvCreateImage(
|
||||
cvGetSize(frame),
|
||||
IPL_DEPTH_8U,
|
||||
3);
|
||||
|
||||
// Change the color format from BGR to HSV
|
||||
cvCvtColor(
|
||||
frame,
|
||||
imgHSV,
|
||||
CV_BGR2HSV);
|
||||
|
||||
imgThresh := GetThresholdedImage(imgHSV);
|
||||
|
||||
// smooth the binary image using Gaussian kernel
|
||||
cvSmooth(
|
||||
imgThresh,
|
||||
imgThresh,
|
||||
CV_GAUSSIAN,
|
||||
3,
|
||||
3);
|
||||
|
||||
ipDraw(
|
||||
pb1.Canvas.Handle,
|
||||
frame,
|
||||
pb1.ClientRect);
|
||||
|
||||
ipDraw(
|
||||
pb2.Canvas.Handle,
|
||||
imgThresh,
|
||||
pb1.ClientRect);
|
||||
|
||||
// Clean up used images
|
||||
cvReleaseImage(imgHSV);
|
||||
cvReleaseImage(imgThresh);
|
||||
cvReleaseImage(frame);
|
||||
end;
|
||||
|
||||
procedure TMainForm.trackObject(imgThresh: pIplImage);
|
||||
Var
|
||||
moments : pCvMoments;
|
||||
moment10, moment01, area: Double;
|
||||
posX, posY : Integer;
|
||||
begin
|
||||
// Calculate the moments of 'imgThresh'
|
||||
moments := allocMem(sizeof(TCvMoments));
|
||||
cvMoments(
|
||||
imgThresh,
|
||||
moments,
|
||||
1);
|
||||
moment10 := cvGetSpatialMoment(
|
||||
moments,
|
||||
1,
|
||||
0);
|
||||
moment01 := cvGetSpatialMoment(
|
||||
moments,
|
||||
0,
|
||||
1);
|
||||
area := cvGetCentralMoment(
|
||||
moments,
|
||||
0,
|
||||
0);
|
||||
|
||||
// if the area<1000, I consider that the there are no object in the image and it's because of the noise, the area is not zero
|
||||
if (area > 1000) then
|
||||
begin
|
||||
// calculate the position of the ball
|
||||
posX := Trunc(moment10 / area);
|
||||
posY := Trunc(moment01 / area);
|
||||
|
||||
if (lastX >= 0) and (lastY >= 0) and (posX >= 0) and (posY >= 0) then
|
||||
// Draw a yellow line from the previous point to the current point
|
||||
cvLine(
|
||||
imgTracking,
|
||||
cvPoint(posX, posY),
|
||||
cvPoint(lastX, lastY),
|
||||
cvScalar(0, 0, 255),
|
||||
4);
|
||||
|
||||
lastX := posX;
|
||||
lastY := posY;
|
||||
|
||||
end;
|
||||
freemem(moments);
|
||||
end;
|
||||
|
||||
procedure TMainForm.TrackingRedObjects(img: pIplImage);
|
||||
Var
|
||||
imgHSV : pIplImage;
|
||||
imgThresh: pIplImage;
|
||||
frame : pIplImage;
|
||||
begin
|
||||
frame := cvCloneImage(img);
|
||||
|
||||
cvSmooth(
|
||||
frame,
|
||||
frame,
|
||||
CV_GAUSSIAN,
|
||||
3,
|
||||
3); // smooth the original image using Gaussian kernel
|
||||
|
||||
imgHSV := cvCreateImage(
|
||||
cvGetSize(frame),
|
||||
IPL_DEPTH_8U,
|
||||
3);
|
||||
cvCvtColor(
|
||||
frame,
|
||||
imgHSV,
|
||||
CV_BGR2HSV); // Change the color format from BGR to HSV
|
||||
imgThresh := GetThresholdedImage(imgHSV);
|
||||
|
||||
cvSmooth(
|
||||
imgThresh,
|
||||
imgThresh,
|
||||
CV_GAUSSIAN,
|
||||
3,
|
||||
3); // smooth the binary image using Gaussian kernel
|
||||
|
||||
// track the possition of the ball
|
||||
trackObject(imgThresh);
|
||||
|
||||
// Add the tracking image and the frame
|
||||
cvAdd(
|
||||
frame,
|
||||
imgTracking,
|
||||
frame);
|
||||
|
||||
ipDraw(
|
||||
pb1.Canvas.Handle,
|
||||
frame,
|
||||
pb1.ClientRect);
|
||||
|
||||
ipDraw(
|
||||
pb2.Canvas.Handle,
|
||||
imgThresh,
|
||||
pb1.ClientRect);
|
||||
|
||||
// Clean up used images
|
||||
cvReleaseImage(imgHSV);
|
||||
cvReleaseImage(imgThresh);
|
||||
cvReleaseImage(frame);
|
||||
end;
|
||||
|
||||
procedure TMainForm.OnIdle(
|
||||
Sender: TObject;
|
||||
var Done: Boolean);
|
||||
Var
|
||||
frame: pIplImage;
|
||||
begin
|
||||
if Assigned(capture) then
|
||||
begin
|
||||
frame := cvQueryFrame(capture);
|
||||
if Assigned(frame) then
|
||||
begin
|
||||
if rb2.Checked then
|
||||
DetectingRedObjects(frame)
|
||||
else if rb1.Checked then
|
||||
begin
|
||||
if not Assigned(imgTracking) then
|
||||
begin
|
||||
// create a blank image and assigned to 'imgTracking' which has the same size of original video
|
||||
imgTracking := cvCreateImage(
|
||||
cvGetSize(frame),
|
||||
IPL_DEPTH_8U,
|
||||
3);
|
||||
cvZero(imgTracking); // covert the image, 'imgTracking' to black
|
||||
end;
|
||||
TrackingRedObjects(frame);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
Done := False;
|
||||
end;
|
||||
|
||||
procedure TMainForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
lastX := -1;
|
||||
lastY := -1;
|
||||
capture := cvCreateCameraCapture(CV_CAP_ANY);
|
||||
if Assigned(capture) then
|
||||
Application.OnIdle := OnIdle;
|
||||
end;
|
||||
|
||||
end.
|
44
samples/MultiDemo/vclColorTracking/vclColorTracking.dpr
Normal file
44
samples/MultiDemo/vclColorTracking/vclColorTracking.dpr
Normal file
@ -0,0 +1,44 @@
|
||||
// *****************************************************************
|
||||
// Delphi-OpenCV Demo
|
||||
// Copyright (C) 2013 Project Delphi-OpenCV
|
||||
// ****************************************************************
|
||||
// Contributor:
|
||||
// Laentir Valetov
|
||||
// email:laex@bk.ru
|
||||
// ****************************************************************
|
||||
// You may retrieve the latest version of this file at the GitHub,
|
||||
// located at git://github.com/Laex/Delphi-OpenCV.git
|
||||
// ****************************************************************
|
||||
// The contents of this file are used with permission, subject to
|
||||
// the Mozilla Public License Version 1.1 (the "License"); you may
|
||||
// not use this file except in compliance with the License. You may
|
||||
// obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/MPL-1_1Final.html
|
||||
//
|
||||
// Software distributed under the License is distributed on an
|
||||
// "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
// implied. See the License for the specific language governing
|
||||
// rights and limitations under the License.
|
||||
// **************************************************************************************************
|
||||
// Original: http://opencv-srf.blogspot.ru/2010/09/object-detection-using-color-seperation.html
|
||||
// *******************************************************************
|
||||
|
||||
// JCL_DEBUG_EXPERT_GENERATEJDBG OFF
|
||||
// JCL_DEBUG_EXPERT_INSERTJDBG OFF
|
||||
program vclColorTracking;
|
||||
|
||||
uses
|
||||
Vcl.Forms,
|
||||
uMainForm in 'uMainForm.pas' {MainForm};
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.MainFormOnTaskbar := True;
|
||||
Application.CreateForm(
|
||||
TMainForm,
|
||||
MainForm);
|
||||
Application.Run;
|
||||
|
||||
end.
|
168
samples/MultiDemo/vclColorTracking/vclColorTracking.dproj
Normal file
168
samples/MultiDemo/vclColorTracking/vclColorTracking.dproj
Normal file
@ -0,0 +1,168 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{B539F149-8AF0-4A5A-A74F-4A3205ED1D16}</ProjectGuid>
|
||||
<ProjectVersion>14.6</ProjectVersion>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<MainSource>vclColorTracking.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Application</AppType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||
<Base_Win64>true</Base_Win64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
|
||||
<Cfg_2_Win32>true</Cfg_2_Win32>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<Manifest_File>None</Manifest_File>
|
||||
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
|
||||
<VerInfo_Locale>1049</VerInfo_Locale>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>..\..\..\bin\</DCC_ExeOutput>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_K>false</DCC_K>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<DCC_UsePackage>cxPivotGridChartRS17;JvGlobus;JvMM;dxSkinSevenRS17;dxSkinBlueprintRS17;JvManagedThreads;dxSkinHighContrastRS17;dxSkinOffice2007BlackRS17;dxCoreRS17;dac170;cxPageControldxBarPopupMenuRS17;dxSkinXmas2008BlueRS17;dxPSDBTeeChartRS17;GLS_ODE;JvCrypt;dxPSTeeChartRS17;dxSkinSummer2008RS17;dxPScxSchedulerLnkRS17;dxSkinBlueRS17;dxSkinDarkRoomRS17;DBXInterBaseDriver;DataSnapServer;DataSnapCommon;dxPScxTLLnkRS17;JvNet;GLScene_RunTime;officeXPrt;JvDotNetCtrls;dxRibbonRS17;DbxCommonDriver;cxDataRS17;vclimg;dxSkinsdxBarPainterRS17;dxPSdxDBTVLnkRS17;dbxcds;DatasnapConnectorsFreePascal;dxSkinMoneyTwinsRS17;JvXPCtrls;vcldb;cxExportRS17;dxPSCoreRS17;dxBarExtItemsRS17;dxGDIPlusRS17;dxNavBarRS17;CustomIPTransport;cxLibraryRS17;cxGridRS17;dxSkinOffice2010BlackRS17;dsnap;IndyIPServer;unidac170;IndyCore;dxSkinMcSkinRS17;CloudService;dxPScxCommonRS17;FmxTeeUI;frxDB17;dxSkinsdxDLPainterRS17;dxSkiniMaginaryRS17;AnyDAC_PhysDb2_D17;JvDB;JvRuntimeDesign;dxPScxVGridLnkRS17;JclDeveloperTools;unidacfmx170;dxSkinSevenClassicRS17;dxPScxExtCommonRS17;dxPScxSSLnkRS17;dxSkinLilianRS17;fs17;dxPSdxLCLnkRS17;dxSkinOffice2010BlueRS17;bindcompfmx;dclTP_LockBox3;dxSkinOffice2010SilverRS17;vcldbx;cxSchedulerGridRS17;dbrtl;bindcomp;inetdb;JvPluginSystem;dxBarRS17;IcsCommonDXE3Run;DBXOdbcDriver;dxBarDBNavRS17;JvCmp;dxSkinWhiteprintRS17;JvTimeFramework;xmlrtl;dxSkinsdxRibbonPainterRS17;ibxpress;GLSS_OpenAL;dxDockingRS17;bindengine;vclactnband;soaprtl;FMXTee;dxADOServerModeRS17;bindcompvcl;dxBarExtDBItemsRS17;PasLib;Jcl;vclie;dxPSPrVwRibbonRS17;dxSkinOffice2007PinkRS17;IcsFmxDXE3Run;cxPageControlRS17;dxSkinscxPCPainterRS17;AnyDAC_PhysADS_D17;AnyDAC_PhysIB_D17;dxmdsRS17;dxSkinTheAsphaltWorldRS17;DBXInformixDriver;Intraweb;dxPsPrVwAdvRS17;GLSS_FMOD;dxSkinSilverRS17;dxdborRS17;DBXFirebirdDriver;dsnapcon;inet;fsDB17;FFmpegFmx_DXE3;JvPascalInterpreter;vclx;dxSkinStardustRS17;cxEditorsRS17;DBXSybaseASADriver;crcontrols170;dbexpress;EurekaLogCore;IndyIPClient;JvBDE;AnyDAC_PhysMySQL_D17;cxTreeListdxBarPopupMenuRS17;dxSkinVS2010RS17;GLCg_RunTime;GLS_NGD;ZComponent;dxThemeRS17;DBXSqliteDriver;dxPScxGridLnkRS17;fmx;JvDlgs;IndySystem;TeeDB;dxSkinValentineRS17;inetdbbde;vclib;DataSnapClient;dxSkinDevExpressStyleRS17;FFmpegRtl_DXE3;DataSnapProviderClient;DBXSybaseASEDriver;cxBarEditItemRS17;AnyDAC_PhysMSAcc_D17;dxServerModeRS17;cxPivotGridOLAPRS17;cxSchedulerRS17;MetropolisUILiveTile;dxSkinPumpkinRS17;dxPSLnksRS17;AnyDAC_PhysSQLITE_D17;dxPSdxDBOCLnkRS17;cxVerticalGridRS17;dxSkinSpringTimeRS17;vcldsnap;GLS_Computing_RunTime;dacvcl170;dxSkinDevExpressDarkStyleRS17;DBXDb2Driver;AnyDAC_ComI_D17;DBXOracleDriver;dxSkinLiquidSkyRS17;JvCore;AnyDAC_PhysMSSQL_D17;vclribbon;AnyDAC_Comp_D17;cxSpreadSheetRS17;AnyDAC_PhysODBC_D17;fmxase;vcl;dxSkinOffice2007SilverRS17;AnyDAC_PhysPg_D17;CodeSiteExpressPkg;DBXMSSQLDriver;IndyIPCommon;dxPSdxOCLnkRS17;FFmpegVcl_DXE3;dcldxSkinsCoreRS17;JvAppFrm;AnyDAC_PhysASA_D17;inetdbxpress;webdsnap;IcsVclDXE3Run;dxSkinCoffeeRS17;AnyDAC_PhysOracle_D17;JvDocking;adortl;dxSkinscxSchedulerPainterRS17;JvWizards;frx17;JvHMI;dxtrmdRS17;dxPScxPCProdRS17;AnyDAC_GUIxForms_D17;JvBands;ZDbc;rtl;DbxClientDriver;dxTabbedMDIRS17;dxSkinSharpPlusRS17;dxComnRS17;ZPlain;dxSkinsCoreRS17;dxSkinLondonLiquidSkyRS17;dxdbtrRS17;JclContainers;Tee;JvSystem;dxorgcRS17;svnui;dxSkinBlackRS17;JvControls;IndyProtocols;DBXMySQLDriver;dxLayoutControlRS17;bindcompdbx;TeeUI;JvJans;JvPrintPreview;JvPageComps;JvStdCtrls;JvCustom;dxSkinOffice2007BlueRS17;dxPScxPivotGridLnkRS17;dxSpellCheckerRS17;ZCore;vcltouch;dxSkinOffice2007GreenRS17;dxSkinSharpRS17;websnap;dxSkinFoggyRS17;dxTileControlRS17;VclSmp;dxSkinDarkSideRS17;cxPivotGridRS17;DataSnapConnectors;AnyDAC_Phys_D17;dacfmx170;fmxobj;cxTreeListRS17;JclVcl;dxPSdxFCLnkRS17;dxSkinGlassOceansRS17;unidacvcl170;ZParseSql;frxe17;svn;dxFlowChartRS17;fmxdae;dxSkinsdxNavBarPainterRS17;bdertl;ExpertTools;DataSnapIndy10ServerTransport;dxDBXServerModeRS17;dxSkinCaramelRS17;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
<DCC_UsePackage>cxPivotGridChartRS17;dxSkinSevenRS17;dxSkinBlueprintRS17;dxSkinHighContrastRS17;dxSkinOffice2007BlackRS17;dxCoreRS17;cxPageControldxBarPopupMenuRS17;dxSkinXmas2008BlueRS17;dxPSDBTeeChartRS17;dxPSTeeChartRS17;dxSkinSummer2008RS17;dxPScxSchedulerLnkRS17;dxSkinBlueRS17;dxSkinDarkRoomRS17;DBXInterBaseDriver;DataSnapServer;DataSnapCommon;dxPScxTLLnkRS17;officeXPrt;dxRibbonRS17;DbxCommonDriver;cxDataRS17;vclimg;dxSkinsdxBarPainterRS17;dxPSdxDBTVLnkRS17;dbxcds;DatasnapConnectorsFreePascal;dxSkinMoneyTwinsRS17;vcldb;cxExportRS17;dxPSCoreRS17;dxBarExtItemsRS17;dxGDIPlusRS17;dxNavBarRS17;CustomIPTransport;cxLibraryRS17;cxGridRS17;dxSkinOffice2010BlackRS17;dsnap;IndyIPServer;IndyCore;dxSkinMcSkinRS17;CloudService;dxPScxCommonRS17;FmxTeeUI;dxSkinsdxDLPainterRS17;dxSkiniMaginaryRS17;AnyDAC_PhysDb2_D17;dxPScxVGridLnkRS17;dxSkinSevenClassicRS17;dxPScxExtCommonRS17;dxPScxSSLnkRS17;dxSkinLilianRS17;dxPSdxLCLnkRS17;dxSkinOffice2010BlueRS17;bindcompfmx;dxSkinOffice2010SilverRS17;cxSchedulerGridRS17;dbrtl;bindcomp;inetdb;dxBarRS17;IcsCommonDXE3Run;DBXOdbcDriver;dxBarDBNavRS17;dxSkinWhiteprintRS17;xmlrtl;dxSkinsdxRibbonPainterRS17;ibxpress;dxDockingRS17;bindengine;vclactnband;soaprtl;FMXTee;dxADOServerModeRS17;bindcompvcl;dxBarExtDBItemsRS17;vclie;dxPSPrVwRibbonRS17;dxSkinOffice2007PinkRS17;IcsFmxDXE3Run;cxPageControlRS17;dxSkinscxPCPainterRS17;AnyDAC_PhysADS_D17;AnyDAC_PhysIB_D17;dxmdsRS17;dxSkinTheAsphaltWorldRS17;DBXInformixDriver;Intraweb;dxPsPrVwAdvRS17;dxSkinSilverRS17;dxdborRS17;DBXFirebirdDriver;dsnapcon;inet;vclx;dxSkinStardustRS17;cxEditorsRS17;DBXSybaseASADriver;dbexpress;IndyIPClient;AnyDAC_PhysMySQL_D17;cxTreeListdxBarPopupMenuRS17;dxSkinVS2010RS17;ZComponent;dxThemeRS17;DBXSqliteDriver;dxPScxGridLnkRS17;fmx;IndySystem;TeeDB;dxSkinValentineRS17;vclib;DataSnapClient;dxSkinDevExpressStyleRS17;DataSnapProviderClient;DBXSybaseASEDriver;cxBarEditItemRS17;AnyDAC_PhysMSAcc_D17;dxServerModeRS17;cxPivotGridOLAPRS17;cxSchedulerRS17;MetropolisUILiveTile;dxSkinPumpkinRS17;dxPSLnksRS17;AnyDAC_PhysSQLITE_D17;dxPSdxDBOCLnkRS17;cxVerticalGridRS17;dxSkinSpringTimeRS17;vcldsnap;dxSkinDevExpressDarkStyleRS17;DBXDb2Driver;AnyDAC_ComI_D17;DBXOracleDriver;dxSkinLiquidSkyRS17;AnyDAC_PhysMSSQL_D17;vclribbon;AnyDAC_Comp_D17;cxSpreadSheetRS17;AnyDAC_PhysODBC_D17;fmxase;vcl;dxSkinOffice2007SilverRS17;AnyDAC_PhysPg_D17;DBXMSSQLDriver;IndyIPCommon;dxPSdxOCLnkRS17;dcldxSkinsCoreRS17;AnyDAC_PhysASA_D17;inetdbxpress;webdsnap;IcsVclDXE3Run;dxSkinCoffeeRS17;AnyDAC_PhysOracle_D17;adortl;dxSkinscxSchedulerPainterRS17;dxtrmdRS17;dxPScxPCProdRS17;AnyDAC_GUIxForms_D17;ZDbc;rtl;DbxClientDriver;dxTabbedMDIRS17;dxSkinSharpPlusRS17;dxComnRS17;ZPlain;dxSkinsCoreRS17;dxSkinLondonLiquidSkyRS17;dxdbtrRS17;Tee;dxorgcRS17;dxSkinBlackRS17;IndyProtocols;DBXMySQLDriver;dxLayoutControlRS17;bindcompdbx;TeeUI;dxSkinOffice2007BlueRS17;dxPScxPivotGridLnkRS17;dxSpellCheckerRS17;ZCore;vcltouch;dxSkinOffice2007GreenRS17;dxSkinSharpRS17;websnap;dxSkinFoggyRS17;dxTileControlRS17;VclSmp;dxSkinDarkSideRS17;cxPivotGridRS17;DataSnapConnectors;AnyDAC_Phys_D17;fmxobj;cxTreeListRS17;dxPSdxFCLnkRS17;dxSkinGlassOceansRS17;ZParseSql;dxFlowChartRS17;fmxdae;dxSkinsdxNavBarPainterRS17;DataSnapIndy10ServerTransport;dxDBXServerModeRS17;dxSkinCaramelRS17;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<DCC_RemoteDebug>false</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_DebugInformation>false</DCC_DebugInformation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
|
||||
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="uMainForm.pas">
|
||||
<Form>MainForm</Form>
|
||||
</DCCReference>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType/>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<VersionInfo>
|
||||
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
|
||||
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
|
||||
<VersionInfo Name="MajorVer">1</VersionInfo>
|
||||
<VersionInfo Name="MinorVer">0</VersionInfo>
|
||||
<VersionInfo Name="Release">0</VersionInfo>
|
||||
<VersionInfo Name="Build">0</VersionInfo>
|
||||
<VersionInfo Name="Debug">False</VersionInfo>
|
||||
<VersionInfo Name="PreRelease">False</VersionInfo>
|
||||
<VersionInfo Name="Special">False</VersionInfo>
|
||||
<VersionInfo Name="Private">False</VersionInfo>
|
||||
<VersionInfo Name="DLL">False</VersionInfo>
|
||||
<VersionInfo Name="Locale">1049</VersionInfo>
|
||||
<VersionInfo Name="CodePage">1251</VersionInfo>
|
||||
</VersionInfo>
|
||||
<VersionInfoKeys>
|
||||
<VersionInfoKeys Name="CompanyName"/>
|
||||
<VersionInfoKeys Name="FileDescription"/>
|
||||
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="InternalName"/>
|
||||
<VersionInfoKeys Name="LegalCopyright"/>
|
||||
<VersionInfoKeys Name="LegalTrademarks"/>
|
||||
<VersionInfoKeys Name="OriginalFilename"/>
|
||||
<VersionInfoKeys Name="ProductName"/>
|
||||
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="Comments"/>
|
||||
<VersionInfoKeys Name="CFBundleName"/>
|
||||
<VersionInfoKeys Name="CFBundleDisplayName"/>
|
||||
<VersionInfoKeys Name="CFBundleIdentifier"/>
|
||||
<VersionInfoKeys Name="CFBundleVersion"/>
|
||||
<VersionInfoKeys Name="CFBundlePackageType"/>
|
||||
<VersionInfoKeys Name="CFBundleSignature"/>
|
||||
<VersionInfoKeys Name="CFBundleAllowMixedLocalizations"/>
|
||||
<VersionInfoKeys Name="CFBundleExecutable"/>
|
||||
</VersionInfoKeys>
|
||||
<Source>
|
||||
<Source Name="MainSource">vclColorTracking.dpr</Source>
|
||||
</Source>
|
||||
</Delphi.Personality>
|
||||
<Deployment/>
|
||||
<Platforms>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
</Project>
|
BIN
samples/MultiDemo/vclColorTracking/vclColorTracking.res
Normal file
BIN
samples/MultiDemo/vclColorTracking/vclColorTracking.res
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user