2013年1月9日 星期三

TBitmap2IPLImage IPLImageToTBitmap



用於OPENCV 影像處理 BITMAP 與 IPLImage 圖像轉換 
function TBitmap2IPLImage(srcBmp: TBitmap): PIplImage; begin Result := cvCreateImage(cvSize(srcBmp.Width, srcBmp.Height), IPL_DEPTH_8U,3); Result.Origin := IPL_ORIGIN_BL; CopyMemory(Result.ImageData, srcBmp.ScanLine[srcBmp.Height - 1],Result.ImageSize); end; function IPLImageToTBitmap(srcImg:PIplImage):TBitmap; var tempImg:PIplImage; pLine:PByte; i:integer; begin try Result := TBitmap.Create; Result.PixelFormat := pf24bit; Result.Width := srcImg.width; Result.Height := srcImg.height; tempImg := nil; if(srcImg.nChannels = 1) then begin tempImg:= cvCreateImage(cvSize(srcImg.width,srcImg.height),IPL_DEPTH_8U, 3); cvCvtColor(srcImg, tempImg, CV_GRAY2BGR); srcImg := tempImg; end; pLine:= srcImg.imageData; if(srcImg.origin = IPL_ORIGIN_BL) then begin CopyMemory(Result.ScanLine[srcImg.height-1], pLine, srcImg.imageSize); end else begin for i:= 0 to srcImg.height do pLine := pLine+srcImg.widthStep ; CopyMemory(Result.ScanLine[i], pLine, srcImg.widthStep); end; cvReleaseImage(&tempImg); finally tempImg := nil; end; end;

沒有留言:

張貼留言