Open CV est il possible sur purebasic?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
totorcalais
Messages : 67
Inscription : mer. 27/sept./2006 12:45

Open CV est il possible sur purebasic?

Message par totorcalais »

Bonjour,

Je m'intéresse à OpenCv et j'ai trouvé peu de fil de discussion en ce sens.

Je sais que je m'attaque à gros et j'ai donc cherché une base de départ.

J'ai trouvé ce code mais (comme l'auteur sur le forum anglais le déplorait), un problème d'accès mémoire s'impose.

Quelqu'un a-t-il une solution?

Je précise que je suis débutant et que c'est en forgeant qu'on devient forgeron ;)

Code : Tout sélectionner

;-
EnableExplicit
OnErrorGoto(?HandleError)
;-
;{ IPL Image Declarations
#IPL_DEPTH_SIGN = $80000000

#IPL_DEPTH_1U = 1
#IPL_DEPTH_8U = 8
#IPL_DEPTH_16U = 16
#IPL_DEPTH_32F = 32

#IPL_DEPTH_8S  = (#IPL_DEPTH_SIGN | 8)
#IPL_DEPTH_16S = (#IPL_DEPTH_SIGN | 16)
#IPL_DEPTH_32S = (#IPL_DEPTH_SIGN | 32)

#IPL_DATA_ORDER_PIXEL = 0
#IPL_DATA_ORDER_PLANE = 1

#IPL_ORIGIN_TL = 0
#IPL_ORIGIN_BL = 1

#IPL_ALIGN_4BYTES = 4
#IPL_ALIGN_8BYTES = 8
#IPL_ALIGN_16BYTES = 16
#IPL_ALIGN_32BYTES = 32

#IPL_ALIGN_DWORD = #IPL_ALIGN_4BYTES
#IPL_ALIGN_QWORD = #IPL_ALIGN_8BYTES

#IPL_BORDER_CONSTANT = 0
#IPL_BORDER_REPLICATE = 1
#IPL_BORDER_REFLECT = 2
#IPL_BORDER_WRAP = 3
;}
;
;{ Color Conversion Constants
#CV_BGR2BGRA = 0
#CV_RGB2RGBA = #CV_BGR2BGRA

#CV_BGRA2BGR = 1
#CV_RGBA2RGB = #CV_BGRA2BGR

#CV_BGR2RGBA = 2
#CV_RGB2BGRA = #CV_BGR2RGBA

#CV_RGBA2BGR = 3
#CV_BGRA2RGB = #CV_RGBA2BGR

#CV_BGR2RGB =  4
#CV_RGB2BGR =  #CV_BGR2RGB

#CV_BGRA2RGBA = 5
#CV_RGBA2BGRA = #CV_BGRA2RGBA

#CV_BGR2GRAY = 6
#CV_RGB2GRAY = 7
#CV_GRAY2BGR = 8
#CV_GRAY2RGB = #CV_GRAY2BGR
#CV_GRAY2BGRA = 9
#CV_GRAY2RGBA = #CV_GRAY2BGRA
#CV_BGRA2GRAY = 10
#CV_RGBA2GRAY = 11

#CV_BGR2BGR565 = 12
#CV_RGB2BGR565 = 13
#CV_BGR5652BGR = 14
#CV_BGR5652RGB = 15
#CV_BGRA2BGR565 = 16
#CV_RGBA2BGR565 = 17
#CV_BGR5652BGRA = 18
#CV_BGR5652RGBA = 19

#CV_GRAY2BGR565 = 20
#CV_BGR5652GRAY = 21

#CV_BGR2BGR555  = 22
#CV_RGB2BGR555  = 23
#CV_BGR5552BGR  = 24
#CV_BGR5552RGB  = 25
#CV_BGRA2BGR555 = 26
#CV_RGBA2BGR555 = 27
#CV_BGR5552BGRA = 28
#CV_BGR5552RGBA = 29

#CV_GRAY2BGR555 = 30
#CV_BGR5552GRAY = 31

#CV_BGR2XYZ =  32
#CV_RGB2XYZ =  33
#CV_XYZ2BGR =  34
#CV_XYZ2RGB =  35

#CV_BGR2YCrCb = 36
#CV_RGB2YCrCb = 37
#CV_YCrCb2BGR = 38
#CV_YCrCb2RGB = 39

#CV_BGR2HSV =  40
#CV_RGB2HSV =  41

#CV_BGR2Lab =  44
#CV_RGB2Lab =  45

#CV_BayerBG2BGR = 46
#CV_BayerGB2BGR = 47
#CV_BayerRG2BGR = 48
#CV_BayerGR2BGR = 49

#CV_BayerBG2RGB = #CV_BayerRG2BGR
#CV_BayerGB2RGB = #CV_BayerGR2BGR
#CV_BayerRG2RGB = #CV_BayerBG2BGR
#CV_BayerGR2RGB = #CV_BayerGB2BGR

#CV_BGR2Luv =  50
#CV_RGB2Luv =  51
#CV_BGR2HLS =  52
#CV_RGB2HLS =  53

#CV_HSV2BGR =  54
#CV_HSV2RGB =  55

#CV_Lab2BGR =  56
#CV_Lab2RGB =  57
#CV_Luv2BGR =  58
#CV_Luv2RGB =  59
#CV_HLS2BGR =  60
#CV_HLS2RGB =  61

#CV_COLORCVT_MAX  = 100
;}
;
#CV_LOAD_IMAGE_UNCHANGED = -1
; /* 8bit, color Or Not */
#CV_LOAD_IMAGE_GRAYSCALE = 0
; /* 8bit, gray */
#CV_LOAD_IMAGE_COLOR = 1
; /* ?, color */
#CV_LOAD_IMAGE_ANYDEPTH = 2
; /* any depth, ? */
#CV_LOAD_IMAGE_ANYCOLOR = 4
; /* ?, any color */
;/
#CV_WINDOW_AUTOSIZE = 1
;/
#CV_BLUR_NO_SCALE = 0
#CV_BLUR  = 1
#CV_GAUSSIAN = 2
#CV_MEDIAN = 3
#CV_BILATERAL = 4
;/
#CV_CANNY_L2_GRADIENT = (1 << 31)
;/
;-
Structure IplROI
  ;
  coi.l
  ; /* 0 - no COI (all channels are selected), 1 - 0th channel is selected ...*/
  xOffset.l
  yOffset.l
  Width.l
  Height.l
  ;
EndStructure
Structure IplImage
  ;
  nSize.l
  ; sizeof(IplImage)
  id.l
  ; version (=0)
  nChannels.l
  ; Most of OpenCV functions support 1,2,3 or 4 channels
  alphaChannel.l
  ; ignored by OpenCV
  depth.l
  ; pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F And IPL_DEPTH_64F are supported
  colorModel.b[4]
  ; ignored by OpenCV
  channelSeq.b[4]
  ; ditto
  dataOrder.l
  ; 0 - interleaved color channels, 1 - separate color channels.  cvCreateImage can only create interleaved images
  origin.l
  ; 0 - top-left origin, 1 - bottom-left origin (Windows bitmaps style)
  align.l
  ; Alignment of image rows (4 or 8).   OpenCV ignores it And uses widthStep instead
  Width.l
  ; image width in pixels
  Height.l
  ; image height in pixels
  roi.l
  ; image ROI. if NULL, the whole image is selected
  maskROI.l
  ; must be NULL
  ImageID.l
  ; ditto
  tileInfo.l
  ; ditto
  imageSize.l
  ; image data size in bytes (==image->height*image->widthStep in Case of interleaved Data)
  imageData.l
  ; pointer to aligned image data
  widthStep.l
  ; size of aligned image row in bytes
  BorderMode.l[4]
  ; ignored by OpenCV
  BorderConst.l[4]
  ; ditto
  imageDataOrigin.l
  ; pointer to very origin of image data (Not necessarily aligned) - needed For correct deallocation
EndStructure
Structure CvSize
  Width.l
  Height.l
EndStructure
;-
Import "highgui.lib"
  ; function declarations
  cvLoadImage(Filename.s, iscolor.l = #CV_LOAD_IMAGE_COLOR)
  cvNamedWindow(name.s, Flags.l = #CV_WINDOW_AUTOSIZE)
  cvDestroyWindow(name.s)
  cvCreateTrackbar(trackbar_name.s, window_name.s, *Value.l, count.l, *cvTrackbarCallback.l)
  cvShowImage(name.s, image.l)
  ;
  cvWaitKey(delay.l = 0)
  ; Wait for key event infinitely (delay<=0) or for "delay" milliseconds
EndImport
Import "cxcore.lib"
  ;
  cvReleaseImage(*Image.l)
  cvCreateImage(Width.l, Height.l, depth.l, channels.l)
  ; Creates IPL image (header and data)
  cvNot(src.l, dst.l)
  cvSetZero(arr.l)
  cvCopy(src.l, dst.l, mask.l = #Null)
  ;
EndImport
Import "cv.lib"
  ;
  cvCvtColor(src.l, dst.l, code.l)
  cvSmooth(*src.l, *dst.l, smoothtype.l = #CV_GAUSSIAN, param1.l = 3, param2.l = 0, param3.d = 0, param4.d = 0)
  cvCanny(image.l, edges.l, threshold1.d, threshold2.d, aperture_size.l = 3)
  ;
EndImport
;-
Global *Image.IplImage, *cedge.IplImage, *gray.IplImage, *edge.IplImage
;
Global edge_thresh.l = 1
;
;-
Procedure.l on_trackbar(h.l)
  ;
   ;cvSmooth(*gray, *edge, #CV_BLUR, 3, 3, 0, 0)
  ; ;
  ; cvNot(*gray, *edge)
  ; ;
  ; cvCanny(*gray, *edge, edge_thresh, edge_thresh * 3, 3)
  ; ;
  ; cvSetZero(*cedge)
  ; ;
  ;cvCopy(*Image, *cedge, *edge)
  ; ;
  ;cvShowImage("Edge", *cedge)
  ;
EndProcedure
;-
Define.CvSize HoldCVSize
;
*Image = cvLoadImage("fruits.jpg", 1)
;
If *Image
  ;
  Debug "Loaded"
  With *Image
    Debug \nSize
    Debug \Width
    Debug \Height
    Debug \nChannels
    Debug \depth
    Debug \dataOrder
    Debug \origin
    Debug \imageSize
    Debug \widthStep
  EndWith
  ;
  HoldCVSize\Width = *Image\Width
  HoldCVSize\Height = *Image\Height
  ;
  *cedge = cvCreateImage(*Image\Width, *Image\Height, #IPL_DEPTH_8U, 3)
  ;
  If *cedge
    ;
    Debug "cedge Create : "+Str(*cedge)
    ;
    *gray = cvCreateImage(*Image\Width, *Image\Height, #IPL_DEPTH_8U, 1)
    *edge = cvCreateImage(*Image\Width, *Image\Height, #IPL_DEPTH_8U, 1)
    ;
    If *gray And *edge
      ;
      Debug "Edge and Gray create"
      ;
      cvCvtColor(*Image, *gray, #CV_BGR2GRAY)
      ;cvCvtColor(*Image, *gray, #CV_BGR2BGRA)
      ;
      cvNamedWindow("Edge", 1)
      ;
      cvCreateTrackbar("Threshold", "Edge", @edge_thresh, 100, @on_trackbar())
      ;
      on_trackbar(0)
      ;
      cvWaitKey(0)
      ;
      cvReleaseImage(@*edge)
      cvReleaseImage(@*gray)
      ;
    EndIf
    ;
    cvReleaseImage(@*cedge)
    ;
  EndIf
  ;
  cvReleaseImage(@*Image)
  ;
  cvDestroyWindow("Edge")
  ;
EndIf
;
;-
Debug "Ended"
;-
End
;-
HandleError:
;
MessageRequester("Error!", GetErrorDescription())
;
End
;-
Voici les fichiers servant à ce test :
http://www.cetout.net/captechno/opencvtest.zip
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Open CV est il possible sur purebasic?

Message par Ar-S »

Salut,

Ce code ne fonctionne ni avec la 4.51 ni avec la 4.60rc2 chez moi.
Mais pour te répondre, je ne connais pas openCV mais je pense que c'est un créateur de CV (...)
Ce qui est logiquement possible de faire avec PB même si ça risque de ne pas être de la tarte.
Le second truc peut-être délicat est l'exportation du CV dans un format précis (.docx, .pdf..)
Peut-être que d'autres pourront être plus précis.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Open CV est il possible sur purebasic?

Message par case »

Ar-S a écrit :Salut,

Ce code ne fonctionne ni avec la 4.51 ni avec la 4.60rc2 chez moi.
Mais pour te répondre, je ne connais pas openCV mais je pense que c'est un créateur de CV (...)
:lol:

http://fr.wikipedia.org/wiki/OpenCV
ImageImage
totorcalais
Messages : 67
Inscription : mer. 27/sept./2006 12:45

Re: Open CV est il possible sur purebasic?

Message par totorcalais »

En effet, il s'agit d'une série de libs intéressantes car j'ai en tête de l'appliquer à de la réalité augmentée.

Je pensais (innocemment, il est vrai) qu'il était possible de faire des applis avec purebasic (au lieu de se remettre au C voire C++) comme il est possible de le faire avec le projet Goblin XNA.

Le code proposé (que j'ai récupéré sur un fil anglo-saxon sur ce thème) est défaillant et personne n'avait proposé de solutions (hormis espérer retrouver ces libs intégrées à purebasic, ce qui aurait été très arrangeant, soit dit en passant).

J'espère toujours qu'un pro des problèmes d'accès mémoire puisse deviner l'endroit où se situe la faille (lorsqu'on touche au trackbar).

PS: je lance le programme sous 4.51 sans souci jusqu'à ce que je touche à la trackbar. Il est vrai que dans l'exemple l'image apparaît également aussitôt alors qu'ici, on n'obtient qu'un fond d'image gris. Pourtant, lors du chargement, il semble détecter les bons attributs de cette image.
totorcalais
Messages : 67
Inscription : mer. 27/sept./2006 12:45

Re: Open CV est il possible sur purebasic?

Message par totorcalais »

un petit y'up
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Open CV est il possible sur purebasic?

Message par djes »

C'est bizarre, il n'y a que quand on utilise une procédure que ça déconne, si tu mets les appels dans le prog principal, pas de souci. Il doit y avoir un problème avec les fonctions d'opencv : soit elles ne remettent pas les registres en état, soit elles bousillent la pile.
Edit : Ou elles ont besoin de certains registres ou de la pile dans un certain état ; car quand on met toutes les fonctions CV dans la proc ça fonctionne sans souci :/
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Open CV est il possible sur purebasic?

Message par djes »

J'ai trouvé ! Utilise ImportC au lieu d'Import... Tout bête :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Open CV est il possible sur purebasic?

Message par Kwai chang caine »

DJES a écrit :....Tout bête
J'en profite que tu parles de moi !!!! :mrgreen:
On la trouve ou cette maudite DLL highgui100.dll que le code reclame :oops:
J'ai téléchargé les deux packs OpenCV-2.3.1-win-superpack.exe et OpenCV-2.3.2-GPU-demo-pack-win32.exe et elle est pas dedans :(
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Open CV est il possible sur purebasic?

Message par djes »

Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Open CV est il possible sur purebasic?

Message par Kwai chang caine »

Merci beaucoup 8)
C'est vraiment la période de noël...par miracle ...j'ai trouvé dans le lien que tu m'as indiqué :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Open CV est il possible sur purebasic?

Message par Mesa »

J'ai des erreurs en utilisant le trackbar sous xp alors que le même exemple fourni avec OpenCV_1.0.exe fonctionne.

Une idée ?

Mesa.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Open CV est il possible sur purebasic?

Message par djes »

Oui, si je me souviens bien (et si je ne me trompe pas), c'est parce que le C utilise les registres quand il n'y a pas beaucoup de paramètres. PB lui, par défaut, utilise seulement et toujours la pile. Si tu lui spécifies un paramètre, il va "dépiler" ce paramètre, ce qui va causer un problème.

Pour y remédier, PB dispose d'un autre mot-clé qui n'est pas dans la doc : ProcedureC

Tu remplaces donc ta proc par

Code : Tout sélectionner

ProcedureC on_trackbar(h.l)
Tout bête, non ? C'est vrai que ce n'est pas très connu, car peu d'utilisateurs finalement utilisent des bibliothèques externes, en général celles de PB suffisent.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Open CV est il possible sur purebasic?

Message par Mesa »

Excellent, ça marche, merci.

J'ai vu qu'il y avait aussi procedureCDLL, je suppose que ça s'utilise dans les même circonstances mais avec les DLL, c'est ça ?

Mesa.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Open CV est il possible sur purebasic?

Message par djes »

Mesa a écrit :Excellent, ça marche, merci.

J'ai vu qu'il y avait aussi procedureCDLL, je suppose que ça s'utilise dans les même circonstances mais avec les DLL, c'est ça ?

Mesa.
Oui, voilà ! Tiens-nous au courant de ton avancement :)
Répondre