Снег Север,ППКС. 
Максимум, что стоит сделать это выкинуть окошко скачивания дополнений, да и то не везде. По большей степени потому что у человека может стоять ограничение трафика.
			
		Модератор: Модераторы
Лекс Айрин писал(а):olegy123, тебя путает совпадение названий. На самом деле, переменную path уже давно можно было похоронить... просто делать это всем лень -- это же думать надо... проще перекрасить пару окошек. Тем более, что в винде все регистрируется в реестре. Да и вообще, в самой процедуре поиска библиотек есть большой глюк -- нельзя, по умолчанию, искать в подпапках установленной программы. И, видимо, он остался еще с самого начала. Поэтому и приходится извращаться с задаваемыми пользователем путями.
Снег Север писал(а):Лекс Айрин, вы упорно путаете библиотеки и СОМ-объекты. Не знаю как в линуксах, но в винде это - совершенно разные сущности. Регистрируются СОМ-объекты (которые тоже библиотеки, но специфические), а обычные библиотеки нигде не регистрируются. Просто есть предопределенные правила их поиска при отсутствии полного пути в вызове - папка с вызывающей программой, папка windows, папка system. У меня бывает с полдесятка разных версий библиотек с одинаковыми названиями, но ни малейшей путаницы не происходит.
Вообще то DOS - это дисковая операционная система, где на дисках есть файлы - с ними нужно было работать через файловую систему.. До них были перфокарты, tap-ленты.Alex2013 писал(а): Дос пошол от CP/Mhttps://ru.wikipedia.org/wiki/CP/M (и кстати диски по алфавиту от туда же )
Снег Север писал(а):Правильно - держать библиотеки в каталоге с экзешником. И не волноваться про любые иные их версии в других местах.Лекс Айрин писал(а):Конечно, проще закинуть ее в папку system, но это не всегда удобно и правильно.
olegy123 писал(а):Лекс, напиши в MS - что мол это святотатство использовать $Path как системную переменную..
olegy123 писал(а):В линуксах там анархия, для COM нужен некий реестр, но его никто не может сделать, там systemd все еще идут баталии об нужности.
olegy123 писал(а): .NET Framework за собой не имеет смысла тянуть вслед за программой в 3Mb.
olegy123 писал(а):Вообще то DOS - это дисковая операционная система, где на дисках есть файлы - с ними нужно было работать через файловую систему.. До них были перфокарты, tap-ленты.
Такие специфичные вещи, как рантаймы, которые идут только от единственного производителя (можно еще Java вспомнить) - это исключения, которые только подтверждают правило. И там, как раз, никаких конфликтов версий не бывает.olegy123 писал(а):не всегда удобно.. .NET Framework за собой не имеет смысла тянуть вслед за программой в 3Mb.
Лекс Айрин писал(а):olegy123 писал(а):Лекс, напиши в MS - что мол это святотатство использовать $Path как системную переменную..
Ну почему, не стоит так к этому серьезно относиться.
Файловая система, где доступ к данным, в том числе и к dll, осуществляется через путь.Лекс Айрин писал(а):1) любая ось сейчас использует диски, так что акцент на этом,теряет смысл.
olegy123 писал(а):Файловая система, где доступ к данным, в том числе и к dll, осуществляется через путь.
Alex2013 писал(а):Разыскиваются проекты с ОpenCV на паскале .
olegy123 писал(а):Есть книжки, в том числе и на русском OpenCV.
olegy123 писал(а): а fpc - скорее будешь первопроходцем.
Alex2013 писал(а):Уже не буду ... там какой-то грек по суетился ...
olegy123 писал(а):у тебя задача очень специфическая, так что не жди прямых ответов, даже на форумах.
проще разобраться как получить нужные данные, какие манипуляции нужно сделать сначала "на бумаге".
OpenCV - это всего лишь набор инструментов. нужно изучить команды.
тогда будет понятно, как решили аналогичные задачи на других языках программирования - команды везде одинаковые..
Добавлено спустя 1 минуту 26 секунд:Alex2013 писал(а):Уже не буду ... там какой-то грек по суетился ...
грек перевел .h в pas.
Демо-версия FrameRecon - это программа Delphi 6, которая отслеживает в реальном времени черный квадрат в изображении веб-камеры.
Программа находит кадр, используя контуры, либо на основе Canny, либо пороговой функции. В дереве различных контуров он ищет четыре угловых, выбирая только один внутренний четырехугольный контур. Для них вычисляется простое правило выравнивания для поиска искомого квадратного кадра. Затем он вычисляет перспективное преобразование (перевод и вращение), вытягивает полученный вычисляемый кадр в зеленый цвет и искажает изображение, поскольку кадр был только перед объективом без перевода или вращения.
type
TCvPointArray = array [0 .. 100] of CvPoint;
pCvPointArray = ^TCvPointArray;
Var B:TBitmap; //Основной рабочий  Bitmap
  cs: CvSize; S:String;
  src: pIplImage = Nil;
  dst: pIplImage = Nil;
  contours: pCvSeq = nil;
  storage: pCvMemStorage;
  i: Integer;
  lines: pCvSeq;
  line: pCvPointArray;
  cvCP:cvPoint;
  const   frame: PIplImage=nil ;
          BO:TBitmap=nil;
....
Begin 
....
// Подключение Опен ЦВ
Cs.width:=b.Width;
Cs.height:=b.Height;
if Frame = nil then Frame:= cvCreateImage( cs, 8, 3 );
Move(b.RawImage.Data^,Frame.ImageData^, Frame.ImageSize);
...
// хранилище памяти для хранения найденных линий
storage := cvCreateMemStorage(0);
lines := nil;
i := 0;
dst := cvCreateImage(cvGetSize(Frame), 8, 1)
SRC := cvCreateImage(cvGetSize(Frame), 8, 1);
cvCvtColor(Frame,SRC,CV_BGR2GRAY);// "Серое небо потухшие птицы ...   " :)
cvCp.x:=0;cvCp.y:=0;
//cvThreshold(SRC, DST, 128, 255, CV_THRESH_BINARY_INV); // Тут что-то не то ...//CvCopy( DST,SRC,0);
// нахождение контуров
cvFindContours(SRC, storage, @contours, SizeOf(CvContour), CV_RETR_LIST,
                                     CV_CHAIN_APPROX_SIMPLE, cvCP);
// прорисовка контуров
cvDrawContours(Frame, contours, CV_RGB(100, 200, 0),
                    CV_RGB(200, 100, 0),1,1 , CV_AA
                    , cvCP);
// нахождение линий
lines := cvHoughLines2(SRC, storage, CV_HOUGH_PROBABILISTIC
, 1,PI / 180, 50, 50,10 );
// нарисуем найденные линии
for i := 0 to lines^.total - 1 do
begin
  line := PCvPointArray  (  cvGetSeqElem(lines, i));
  cvLine(Frame, line^[0], line^[1], CV_RGB(255, 0, 0)//, 1, CV_AA, 0 );
end;  
cvReleaseMemStorage(storage);
cvReleaseImage(src);
cvReleaseImage(dst);
IplImage2Bitmap(frame,b);
....
  Procedure OpenCV_ARTest(Var src: pIplImage);
  function CvSize(const width, height: Integer): TCvSize;
begin
  Result.width  := width;
  Result.height := height;
end;
function CvTermCriteria(_type: Integer; max_iter: Integer; epsilon: Double): TCvTermCriteria;
  begin
    Result.type_  := _type;
    Result.maxIter := max_iter;
    Result.epsilon  := epsilon;
  end;
  type
    TCvPointArray = array [0 .. 100] of CvPoint;
    pCvPointArray = ^TCvPointArray;
    pCvPoint2D32f = ^TCvPoint2D32f;
(*    TCvPoint2D32f = record
      x: Single;
      y: Single;
  {$IFDEF DELPHIXE2_UP}
      class operator Subtract(a, b: TCvPoint2D32f): TCvPoint2D32f; // Subtraction of type TCvPoint2D32f
      function Norm: Single;
      function cvPoint: TCvPoint;
  {$ENDIF}
    end;
 }*)
Type   Tcorners=Array[0..1] of  pCvPoint2D32f;
  const
  // Print pattern "chessboard 6x5.jpg"
//  trailer_filename =  'trailer.avi';
 pic_filename = 'pic.jpg';
Var
  capture: pCvCapture = nil;
  image: pIplImage = nil;
  frame: pIplImage = nil;
  neg_img, cpy_img: pIplImage;
  key: Integer = 0;
  fcount: Integer = 0;
  option: Integer = 0;
  vid: pCvCapture = nil;
  pic: pIplImage;
  b_width: Integer = 5;
  b_height: Integer = 4;
  b_squares: Integer = 20;
  b_size: TCvSize;
  warp_matrix: pCvMat=Nil;
  corners:pCvPoint2D32f  {^ Tcorners} =Nil;
  corner_count: Integer;
  gray: pIplImage;
  found: Integer;
  p: array [0 .. 3] of TCvPoint2D32f;
  q: array [0 .. 3] of TCvPoint2D32f;
  blank: pIplImage;
  pp: array [0 .. 3] of CvPoint;
begin
image:=src;
pic := cvLoadImage(pic_filename);
//cvFlip(pic, pic, 1);
b_size.width := b_width;
b_size.height :=b_height;
if warp_matrix=Nil then
warp_matrix := cvCreateMat(3, 3, CV_32FC1);
if  corners=Nil then
 corners := AllocMem(b_squares * SizeOf(TCvPoint2D32f));
//cvFlip(image, image, 1);
    cpy_img := cvCreateImage(cvGetSize(image), 8, 3);
    neg_img := cvCreateImage(cvGetSize(image), 8, 3);
    gray := cvCreateImage(cvGetSize(image), image^.depth, 1);
   found := cvFindChessboardCorners (image, b_size, PCvPoint2D32f(corners), @corner_count,
   CV_CALIB_CB_ADAPTIVE_THRESH or       CV_CALIB_CB_FILTER_QUADS);
    cvCvtColor(image, gray, CV_BGR2GRAY);
    // This function identifies the pattern from the gray image, saves the valid group of corners
    cvFindCornerSubPix(gray,  PCvPoint2D32f(corners), corner_count, cvSize(11, 11), cvSize(-1, -1),
    cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER , 30, 0.1));
if (corner_count = b_squares) then
 begin
     blank := cvCreateImage(cvGetSize(pic), 8, 3);
   //  CvCopy(image,blank,nil);
    cvZero(blank);
    cvNot(blank, blank);
     // Set of source points to calculate Perspective matrix
     q[0].x := pic^.width * 0;
     q[0].y := pic^.height * 0;
     q[1].x := pic^.width;
     q[1].y := pic^.height * 0;
     q[2].x := pic^.width;
     q[2].y := pic^.height;
     q[3].x := pic^.width * 0;
     q[3].y := pic^.height;
     // Set of destination points to calculate Perspective matrix
     p[0].x := corners[0].x;
     p[0].y := corners[0].y;
     p[1].x := corners[4].x;
     p[1].y := corners[4].y;
     p[2].x := corners[19].x;
     p[2].y := corners[19].y;
     p[3].x := corners[15].x;
     p[3].y := corners[15].y;
     // Calculate Perspective matrix
     cvGetPerspectiveTransform(@q, @p, warp_matrix);
     // Boolean juggle to obtain 2D-Augmentation
     cvZero(neg_img);
     cvZero(cpy_img);
     cvWarpPerspective(pic, neg_img, warp_matrix,
     //CV_INER_LINEAR + CV_WARP_FILL_OUTLIERS
     9, cvScalarAll(0));
     cvWarpPerspective(blank, cpy_img, warp_matrix,
     //CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS
     9, cvScalarAll(0));
    cvNot(cpy_img, cpy_img);
     cvAnd(cpy_img, image, cpy_img, nil);
     cvOr(image, neg_img, image, nil);
     cvFlip(gray, gray);
    cvReleaseImage(blank);
   end ;
//---------------------------------
    cvReleaseImage(cpy_img);
    cvReleaseImage(neg_img);
    cvReleaseImage(gray);
//------------------------
 end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1