1

Тема: AHK: Определение точных координат центра лица на картинке

Добрый день.
Есть скрипт, который определяет положение лица на картинке.

Как сделать так, чтобы скрипт выписывал в txt файл - координаты центра этого красного квадрата (в котором определилось лицо) ?
В текстовом файле 1.txt - появится надпись
X=254
Y=320

Файлы лежат здесь : dropmefiles.com/ggzpR

2

Re: AHK: Определение точных координат центра лица на картинке

А в чем проблема?
В скрипте же явно написано в каком месте эти координаты получаются.

3

Re: AHK: Определение точных координат центра лица на картинке

Проблема в том, чтобы в txt-файл эти координаты перевести.

4

Re: AHK: Определение точных координат центра лица на картинке

fileappend

5

Re: AHK: Определение точных координат центра лица на картинке

Malcev, вот листинг скрипта:


file := "lena.jpg"
window := "gui"
haarcascade := "haarcascade_frontalface_default.xml"
scale := 1.3


;start dll opencv
Global opencv_core := "opencv_core2413.dll"
Global opencv_highgui := "opencv_highgui2413.dll"
Global opencv_imgproc := "opencv_imgproc2413.dll"
Global opencv_objdetect := "opencv_objdetect2413.dll"
_OpenCV_Startup()

;//load haar data
cascade := _cvLoad(haarcascade)

;// load IPL type image
pimg := _cvLoadImage(file)

;// show our input image
_cvShowImage(window, pimg)

;// Create destination images
pimgGrayScale := _cvCreateImage(_cvGetSize(pimg, width, height), 8, 1)
pimgsmall := _cvCreateImage(_cvSize(Round(width/scale), Round(height/scale)), 8, 1)

;//converting the original image into grayscale, resize, and equalize
_cvCvtColor(pimg, pimgGrayScale, CV_BGR2GRAY := 6)
_cvResize(pimgGrayScale, pimgsmall, CV_INTER_LINEAR := 1)
_cvEqualizeHist(pimgsmall, pimgsmall)

; //setup memory block for sequence storage
pstorage := _cvCreateMemStorage(0)   ; //storage area for all contours
_cvClearMemStorage(pstorage)

;// Detect features using haar cascades store as CvSeq
objects := _cvHaarDetectObjects(pimgsmall, cascade, pstorage, 1.1, 8, 0, _cvSize(30, 30))

;// Draw rectangles around detected features
loop % NumGet(objects+0, 8+A_PtrSize*4, "int")   ;  total found
{
   r := _cvGetSeqElem(objects, A_Index)
   x := NumGet(r+0, 0, "int")*scale
   y := NumGet(r+0, 4, "int")*scale
   w := NumGet(r+0, 8, "int")*scale
   h := NumGet(r+0, 12, "int")*scale
   _cvRectangle(pimg, _cvPoint(x, y), _cvPoint(x+w, y+h), _CV_RGB(255, 0, 0), 2, 8, 0)

   ;// Update input image
   _cvShowImage(window, pimg)
}
msgbox done

_cvReleaseImage(pimgsmall)
_cvReleaseImage(pimgGrayScale)
_cvReleaseImage(pimg)
_cvDestroyAllWindows()
_cvClearMemStorage(pstorage)
_cvClearSeq(objects)
_Opencv_CloseDLL()
ExitApp






_OpenCV_Startup()
{
   DllCall("LoadLibrary", "Str", opencv_core, "Ptr")
   DllCall("LoadLibrary", "Str", opencv_highgui, "Ptr")
   DllCall("LoadLibrary", "Str", opencv_imgproc, "Ptr")
   DllCall("LoadLibrary", "Str", opencv_objdetect, "Ptr")
}

_cvLoadImage(filename, iscolor := 1)  ;  CV_LOAD_IMAGE_COLOR
{
   Result := DllCall(opencv_highgui "\cvLoadImage", "AStr", filename, "int", iscolor, "Cdecl Int")
   if !Result or ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvNamedWindow(name, flags := 0x00000001)   ;   CV_WINDOW_AUTOSIZE 
{
   DllCall(opencv_highgui "\cvNamedWindow", "AStr", name, "int", flags, "Cdecl Int")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvShowImage(name, pimage)
{
   DllCall(opencv_highgui "\cvShowImage", "AStr", name, "ptr", pimage, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvGetSize(pimage, ByRef width := 0, ByRef height := 0)
{
   WidthHeight := DllCall(opencv_core "\cvGetSize", "ptr", pimage, "Cdecl int64")
   width := 0xFFFFFFFF & WidthHeight
   height := WidthHeight >> 32
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return WidthHeight
}

_cvCreateMat(cvrows, cvcols, cvtype)
{
   Result := DllCall(opencv_core "\cvCreateMat", "int", cvrows, "int", cvcols, "int", cvtype, "Cdecl ptr")
   if !Result or ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvMatchTemplate(cvimage, cvtempl, cvresult, cvmethod)
{
   DllCall(opencv_imgproc "\cvMatchTemplate", "ptr", cvimage, "ptr", cvtempl, "ptr", cvresult, "int", cvmethod, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvNormalize(cvsrc, cvdst, cva, cvb, cvnorm_type, cvmask)
{
   DllCall(opencv_core "\cvNormalize", "ptr", cvsrc, "ptr", cvdst, "Double", cva, "Double", cvb, "int", cvnorm_type, "ptr", cvmask, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvThreshold(cvsrc, cvdst, cvthreshold, cvmax_value, cvthreshold_type)
{
   DllCall(opencv_imgproc "\cvThreshold", "ptr", cvsrc, "ptr", cvdst, "Double", cvthreshold, "Double", cvmax_value, "int", cvthreshold_type, "Cdecl double")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvSize(width, height)
{
   return width&0xFFFFFFFF|height<<32
}

_cvPoint(x, y)
{
   return x&0xFFFFFFFF|y<<32
}

_cvCreateImage(cvsize, cvdepth, cvchannels)
{
   Result := DllCall(opencv_core "\cvCreateImage", "int64", cvsize, "int", cvdepth, "int", cvchannels, "Cdecl ptr")
   if !Result or ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvScalar(value)
{
   VarSetCapacity(vScalar, 32, 0)
   if IsObject(value)
   {
      loop 4
         NumPut(value%A_Index%, vScalar, (A_Index-1)*8, "double")
   }
   else
   {
      loop 4
         NumPut(value, vScalar, (A_Index-1)*8, "double")
   }
   return &vScalar
}

_CV_RGB(cvRed, cvGreen, cvBlue)
{
   VarSetCapacity(vScalar, 32, 0)
   NumPut(cvBlue, vScalar, 0, "double")
   NumPut(cvGreen, vScalar, 8, "double")
   NumPut(cvRed, vScalar, 16, "double")
   NumPut(0, vScalar, 24, "double")
   return &vScalar
}

_cvSet(cvarr, cvvalue, cvmask := 0)
{
   if (A_PtrSize = 4)
      DllCall(opencv_core "\cvSet", "ptr", cvarr, "double", NumGet(cvvalue+0, 0, "double"), "double", NumGet(cvvalue+0, 8, "double"), "double", NumGet(cvvalue+0, 16, "double"), "double", NumGet(cvvalue+0, 24, "double"), "ptr", cvmask, "Cdecl")
   else
      DllCall(opencv_core "\cvSet", "ptr", cvarr, "ptr", cvvalue, "ptr", cvmask, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvMinMaxLoc(cvarr, cvmin_val, cvmax_val, cvmin_loc, cvmax_loc, cvmask)
{
   DllCall(opencv_core "\cvMinMaxLoc", "ptr", cvarr, "ptr", cvmin_val, "ptr", cvmax_val, "ptr", cvmin_loc, "ptr", cvmax_loc, "ptr", cvmask, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvRectangle(cvimg, cvpt1, cvpt2, cvcolor, cvthickness, cvline_type, cvshift)
{
   if (A_PtrSize = 4)
      DllCall(opencv_core "\cvRectangle", "ptr", cvimg, "int64", cvpt1, "int64", cvpt2, "double", NumGet(cvcolor+0, 0, "double"), "double", NumGet(cvcolor+0, 8, "double"), "double", NumGet(cvcolor+0, 16, "double"), "double", NumGet(cvcolor+0, 24, "double"), "int", cvthickness, "int", cvline_type, "int", cvshift, "Cdecl")
   else
      DllCall(opencv_core "\cvRectangle", "ptr", cvimg, "int64", cvpt1, "int64", cvpt2, "ptr", cvcolor, "int", cvthickness, "int", cvline_type, "int", cvshift, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvCvtColor(cvsrc, cvdst, cvcode)
{
   DllCall(opencv_imgproc "\cvCvtColor", "ptr", cvsrc, "ptr", cvdst, "int", cvcode, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvResize(cvsrc, cvdst, cvinterpolation := 1)   ; CV_INTER_LINEAR
{
   DllCall(opencv_imgproc "\cvResize", "ptr", cvsrc, "ptr", cvdst, "int", cvinterpolation, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvEqualizeHist(cvsrc, cvdst)
{
   DllCall(opencv_imgproc "\cvEqualizeHist", "ptr", cvsrc, "ptr", cvdst, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvLoad(cvfilename, cvmemstorage := 0, cvname := 0, cvreal_name := 0)
{
   Result := DllCall(opencv_core "\cvLoad", "AStr", cvfilename, "ptr", cvmemstorage, "ptr", cvname, "ptr", cvreal_name, "Cdecl ptr")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvCreateMemStorage(cvblock_size)
{
   Result := DllCall(opencv_core "\cvCreateMemStorage", "int", cvblock_size, "Cdecl ptr")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvClearMemStorage(cvstorage)
{
   DllCall(opencv_core "\cvClearMemStorage", "ptr", cvstorage, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvHaarDetectObjects(cvimage, cvcascade, cvstorage, cvscale_factor := 1.1, cvmin_neighbors := 3, cvflags := 0, cvmin_size := 0, cvmax_size := 0)
{
   Result := DllCall(opencv_objdetect "\cvHaarDetectObjects", "ptr", cvimage, "ptr", cvcascade, "ptr", cvstorage, "double", cvscale_factor, "int", cvmin_neighbors, "int", cvflags, "int64", cvmin_size, "int64", cvmax_size, "Cdecl ptr")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvGetSeqElem(cvseq, cvindex)
{
   Result := DllCall(opencv_core "\cvGetSeqElem", "ptr", cvseq, "int", cvindex, "Cdecl ptr")
   if !Result or ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvReleaseImage(pimage)
{
   DllCall(opencv_core "\cvReleaseImage", "ptr*", pimage, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvReleaseMat(cvmat)
{
   DllCall(opencv_core "\cvReleaseMat", "ptr*", cvmat, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvDestroyAllWindows()
{
   DllCall(opencv_highgui "\cvDestroyAllWindows", "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvClearSeq(cvseq)
{
   DllCall(opencv_core "\cvClearSeq", "ptr", cvseq, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_Opencv_CloseDLL()
{
   if hModule := DllCall("GetModuleHandle", "str", opencv_core)
      DllCall("FreeLibrary", "ptr", hModule)
   if hModule := DllCall("GetModuleHandle", "str", opencv_highgui)
      DllCall("FreeLibrary", "ptr", hModule)
   if hModule := DllCall("GetModuleHandle", "str", opencv_imgproc)
      DllCall("FreeLibrary", "ptr", hModule)
   if hModule := DllCall("GetModuleHandle", "str", opencv_objdetect)
      DllCall("FreeLibrary", "ptr", hModule)
}

_Error(val)
{
   msgbox % val
   ExitApp
}

Подскажите пожалуйста, куда здесь добавить команду fileappend - чтобы в txt-файл эти координаты перевести ?

6

Re: AHK: Определение точных координат центра лица на картинке

Мне знаком этот скрипт, так как я его когда-то и написал.
После ;// Draw rectangles around detected features в цикле определяются координаты.
Можете сохранять их в переменную и после выхода из цикла сохранять переменную в файл.

7 (изменено: ОсиповаТатьяна, 2019-09-22 22:16:04)

Re: AHK: Определение точных координат центра лица на картинке

Malcev, ясно.
Это видимо будут значения x+w/2   и  y+h/2

Команда записи этих значений в файл будет выглядеть так:

FileAppend,
(
x+w/2
y+h/2
), My File.txt 

Все правильно ?

8

Re: AHK: Определение точных координат центра лица на картинке

ОсиповаТатьяна пишет:

Это видимо будут значения x+w/2   и  y+h/2

Эта часть правильна.
Остальное вы можете проверить сами.

9

Re: AHK: Определение точных координат центра лица на картинке

Malcev,
Получился вот такой скрипт:


file := "lena.jpg"
window := "gui"
haarcascade := "haarcascade_frontalface_default.xml"
scale := 1.3


;start dll opencv
Global opencv_core := "opencv_core2413.dll"
Global opencv_highgui := "opencv_highgui2413.dll"
Global opencv_imgproc := "opencv_imgproc2413.dll"
Global opencv_objdetect := "opencv_objdetect2413.dll"
_OpenCV_Startup()

;//load haar data
cascade := _cvLoad(haarcascade)

;// load IPL type image
pimg := _cvLoadImage(file)

;// show our input image
_cvShowImage(window, pimg)

;// Create destination images
pimgGrayScale := _cvCreateImage(_cvGetSize(pimg, width, height), 8, 1)
pimgsmall := _cvCreateImage(_cvSize(Round(width/scale), Round(height/scale)), 8, 1)

;//converting the original image into grayscale, resize, and equalize
_cvCvtColor(pimg, pimgGrayScale, CV_BGR2GRAY := 6)
_cvResize(pimgGrayScale, pimgsmall, CV_INTER_LINEAR := 1)
_cvEqualizeHist(pimgsmall, pimgsmall)

; //setup memory block for sequence storage
pstorage := _cvCreateMemStorage(0)   ; //storage area for all contours
_cvClearMemStorage(pstorage)

;// Detect features using haar cascades store as CvSeq
objects := _cvHaarDetectObjects(pimgsmall, cascade, pstorage, 1.1, 8, 0, _cvSize(30, 30))

;// Draw rectangles around detected features
loop % NumGet(objects+0, 8+A_PtrSize*4, "int")   ;  total found
{
   r := _cvGetSeqElem(objects, A_Index)
   x := NumGet(r+0, 0, "int")*scale
   y := NumGet(r+0, 4, "int")*scale
   w := NumGet(r+0, 8, "int")*scale
   h := NumGet(r+0, 12, "int")*scale


FileAppend,
(
x+w/2
y+h/2
), My File.txt 


   _cvRectangle(pimg, _cvPoint(x, y), _cvPoint(x+w, y+h), _CV_RGB(255, 0, 0), 2, 8, 0)

   ;// Update input image
   _cvShowImage(window, pimg)
}
msgbox done

_cvReleaseImage(pimgsmall)
_cvReleaseImage(pimgGrayScale)
_cvReleaseImage(pimg)
_cvDestroyAllWindows()
_cvClearMemStorage(pstorage)
_cvClearSeq(objects)
_Opencv_CloseDLL()
ExitApp






_OpenCV_Startup()
{
   DllCall("LoadLibrary", "Str", opencv_core, "Ptr")
   DllCall("LoadLibrary", "Str", opencv_highgui, "Ptr")
   DllCall("LoadLibrary", "Str", opencv_imgproc, "Ptr")
   DllCall("LoadLibrary", "Str", opencv_objdetect, "Ptr")
}

_cvLoadImage(filename, iscolor := 1)  ;  CV_LOAD_IMAGE_COLOR
{
   Result := DllCall(opencv_highgui "\cvLoadImage", "AStr", filename, "int", iscolor, "Cdecl Int")
   if !Result or ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvNamedWindow(name, flags := 0x00000001)   ;   CV_WINDOW_AUTOSIZE 
{
   DllCall(opencv_highgui "\cvNamedWindow", "AStr", name, "int", flags, "Cdecl Int")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvShowImage(name, pimage)
{
   DllCall(opencv_highgui "\cvShowImage", "AStr", name, "ptr", pimage, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvGetSize(pimage, ByRef width := 0, ByRef height := 0)
{
   WidthHeight := DllCall(opencv_core "\cvGetSize", "ptr", pimage, "Cdecl int64")
   width := 0xFFFFFFFF & WidthHeight
   height := WidthHeight >> 32
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return WidthHeight
}

_cvCreateMat(cvrows, cvcols, cvtype)
{
   Result := DllCall(opencv_core "\cvCreateMat", "int", cvrows, "int", cvcols, "int", cvtype, "Cdecl ptr")
   if !Result or ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvMatchTemplate(cvimage, cvtempl, cvresult, cvmethod)
{
   DllCall(opencv_imgproc "\cvMatchTemplate", "ptr", cvimage, "ptr", cvtempl, "ptr", cvresult, "int", cvmethod, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvNormalize(cvsrc, cvdst, cva, cvb, cvnorm_type, cvmask)
{
   DllCall(opencv_core "\cvNormalize", "ptr", cvsrc, "ptr", cvdst, "Double", cva, "Double", cvb, "int", cvnorm_type, "ptr", cvmask, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvThreshold(cvsrc, cvdst, cvthreshold, cvmax_value, cvthreshold_type)
{
   DllCall(opencv_imgproc "\cvThreshold", "ptr", cvsrc, "ptr", cvdst, "Double", cvthreshold, "Double", cvmax_value, "int", cvthreshold_type, "Cdecl double")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvSize(width, height)
{
   return width&0xFFFFFFFF|height<<32
}

_cvPoint(x, y)
{
   return x&0xFFFFFFFF|y<<32
}

_cvCreateImage(cvsize, cvdepth, cvchannels)
{
   Result := DllCall(opencv_core "\cvCreateImage", "int64", cvsize, "int", cvdepth, "int", cvchannels, "Cdecl ptr")
   if !Result or ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvScalar(value)
{
   VarSetCapacity(vScalar, 32, 0)
   if IsObject(value)
   {
      loop 4
         NumPut(value%A_Index%, vScalar, (A_Index-1)*8, "double")
   }
   else
   {
      loop 4
         NumPut(value, vScalar, (A_Index-1)*8, "double")
   }
   return &vScalar
}

_CV_RGB(cvRed, cvGreen, cvBlue)
{
   VarSetCapacity(vScalar, 32, 0)
   NumPut(cvBlue, vScalar, 0, "double")
   NumPut(cvGreen, vScalar, 8, "double")
   NumPut(cvRed, vScalar, 16, "double")
   NumPut(0, vScalar, 24, "double")
   return &vScalar
}

_cvSet(cvarr, cvvalue, cvmask := 0)
{
   if (A_PtrSize = 4)
      DllCall(opencv_core "\cvSet", "ptr", cvarr, "double", NumGet(cvvalue+0, 0, "double"), "double", NumGet(cvvalue+0, 8, "double"), "double", NumGet(cvvalue+0, 16, "double"), "double", NumGet(cvvalue+0, 24, "double"), "ptr", cvmask, "Cdecl")
   else
      DllCall(opencv_core "\cvSet", "ptr", cvarr, "ptr", cvvalue, "ptr", cvmask, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvMinMaxLoc(cvarr, cvmin_val, cvmax_val, cvmin_loc, cvmax_loc, cvmask)
{
   DllCall(opencv_core "\cvMinMaxLoc", "ptr", cvarr, "ptr", cvmin_val, "ptr", cvmax_val, "ptr", cvmin_loc, "ptr", cvmax_loc, "ptr", cvmask, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvRectangle(cvimg, cvpt1, cvpt2, cvcolor, cvthickness, cvline_type, cvshift)
{
   if (A_PtrSize = 4)
      DllCall(opencv_core "\cvRectangle", "ptr", cvimg, "int64", cvpt1, "int64", cvpt2, "double", NumGet(cvcolor+0, 0, "double"), "double", NumGet(cvcolor+0, 8, "double"), "double", NumGet(cvcolor+0, 16, "double"), "double", NumGet(cvcolor+0, 24, "double"), "int", cvthickness, "int", cvline_type, "int", cvshift, "Cdecl")
   else
      DllCall(opencv_core "\cvRectangle", "ptr", cvimg, "int64", cvpt1, "int64", cvpt2, "ptr", cvcolor, "int", cvthickness, "int", cvline_type, "int", cvshift, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvCvtColor(cvsrc, cvdst, cvcode)
{
   DllCall(opencv_imgproc "\cvCvtColor", "ptr", cvsrc, "ptr", cvdst, "int", cvcode, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvResize(cvsrc, cvdst, cvinterpolation := 1)   ; CV_INTER_LINEAR
{
   DllCall(opencv_imgproc "\cvResize", "ptr", cvsrc, "ptr", cvdst, "int", cvinterpolation, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvEqualizeHist(cvsrc, cvdst)
{
   DllCall(opencv_imgproc "\cvEqualizeHist", "ptr", cvsrc, "ptr", cvdst, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvLoad(cvfilename, cvmemstorage := 0, cvname := 0, cvreal_name := 0)
{
   Result := DllCall(opencv_core "\cvLoad", "AStr", cvfilename, "ptr", cvmemstorage, "ptr", cvname, "ptr", cvreal_name, "Cdecl ptr")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvCreateMemStorage(cvblock_size)
{
   Result := DllCall(opencv_core "\cvCreateMemStorage", "int", cvblock_size, "Cdecl ptr")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvClearMemStorage(cvstorage)
{
   DllCall(opencv_core "\cvClearMemStorage", "ptr", cvstorage, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvHaarDetectObjects(cvimage, cvcascade, cvstorage, cvscale_factor := 1.1, cvmin_neighbors := 3, cvflags := 0, cvmin_size := 0, cvmax_size := 0)
{
   Result := DllCall(opencv_objdetect "\cvHaarDetectObjects", "ptr", cvimage, "ptr", cvcascade, "ptr", cvstorage, "double", cvscale_factor, "int", cvmin_neighbors, "int", cvflags, "int64", cvmin_size, "int64", cvmax_size, "Cdecl ptr")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvGetSeqElem(cvseq, cvindex)
{
   Result := DllCall(opencv_core "\cvGetSeqElem", "ptr", cvseq, "int", cvindex, "Cdecl ptr")
   if !Result or ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
   return Result
}

_cvReleaseImage(pimage)
{
   DllCall(opencv_core "\cvReleaseImage", "ptr*", pimage, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvReleaseMat(cvmat)
{
   DllCall(opencv_core "\cvReleaseMat", "ptr*", cvmat, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvDestroyAllWindows()
{
   DllCall(opencv_highgui "\cvDestroyAllWindows", "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_cvClearSeq(cvseq)
{
   DllCall(opencv_core "\cvClearSeq", "ptr", cvseq, "Cdecl")
   if ErrorLevel
      _Error(A_ThisFunc "`n" ErrorLevel)
}

_Opencv_CloseDLL()
{
   if hModule := DllCall("GetModuleHandle", "str", opencv_core)
      DllCall("FreeLibrary", "ptr", hModule)
   if hModule := DllCall("GetModuleHandle", "str", opencv_highgui)
      DllCall("FreeLibrary", "ptr", hModule)
   if hModule := DllCall("GetModuleHandle", "str", opencv_imgproc)
      DllCall("FreeLibrary", "ptr", hModule)
   if hModule := DllCall("GetModuleHandle", "str", opencv_objdetect)
      DllCall("FreeLibrary", "ptr", hModule)
}

_Error(val)
{
   msgbox % val
   ExitApp
}

Появляется файл "My File.txt", но там нет координат, а просто запись:
x+w/2
y+h/2
Как же изменить скрипт, чтобы он вычислял и прописывал в файле численные координаты ?

10

Re: AHK: Определение точных координат центра лица на картинке

ОсиповаТатьяна пишет:

Как же изменить скрипт, чтобы он вычислял и прописывал в файле численные координаты ?

Почитать таки справку.

11

Re: AHK: Определение точных координат центра лица на картинке

Malcev, пример взят как раз из той самой справки, о которой вы говорили.
http://ahk-wiki.ru/fileappend

12

Re: AHK: Определение точных координат центра лица на картинке

Почитайте в чем разница между текстом и переменными.
Если и после этого не получится, то на форуме есть поиск - посмотрите примеры использования данной команды.

13

Re: AHK: Определение точных координат центра лица на картинке

Понятно.
Теперь скрипт выглядит вот так:

koordX :=x+w/2
koordY :=y+h/2

FileAppend,
(
 %koordX%
 %koordY%
), My File.txt 

Но скрипт теперь не перезаписывает файл My File.txt
а нагромождает там - все в кучу.

14

Re: AHK: Определение точных координат центра лица на картинке

По второму кругу?
http://forum.script-coding.com/viewtopic.php?id=14447

15

Re: AHK: Определение точных координат центра лица на картинке

Malcev, понятно.
Спасибо.