2012-08-16 90 views
-2

我在GPU編程中是全新的,在使用GPU之前我沒有經驗,我有一些功能,我必須轉換這些功能,以便它們在GPU中運行,CPU版本正在運行好的,我已經使用emgucv進行圖像操作。我的代碼給出在下面,請幫助我。將emgu代碼轉換爲GPU

public static Image Highlight(Image image) 
    { 
     if (image == null) 
     { 
     throw new ArgumentNullException("image"); 
     } 

     using (Image<Bgr, byte> originalImage = ConvertToEmgu(image)) 
     using (Image<Bgr, byte> resavedOriginalImage = ConvertToEmgu(ResaveImageWithGivenCompression(image))) 
     using (Image<Bgr, byte> errorLevelImage = (originalImage - resavedOriginalImage) * scalingFactor) 
     { 
     return errorLevelImage.ToBitmap(); 
     } 
    } 

    private static Image<Bgr, byte> ConvertToEmgu(Image image) 
    { 
     using (Bitmap bitmap = new Bitmap(image)) 
     { 
     return new Image<Bgr, byte>(bitmap); 
     } 
    } 

    private static Image ResaveImage(Image image) 
    { 
     EncoderParameters jpegEncoderParameters = new EncoderParameters(1); 
     ImageCodecInfo jpegWithGivenCompressionFormat = GetEncoderInfo("image/jpeg"); 

     jpegEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, compressionQuality); 

     using (MemoryStream resavedImageStream = new MemoryStream()) 
     { 
     image.Save(resavedImageStream, jpegWithGivenCompressionFormat, jpegEncoderParameters); 

     return Image.FromStream(resavedImageStream); 
     } 
    } 

    private static ImageCodecInfo GetEncoderInfo(string mimeType) 
    { 
     ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders(); 

     return encoders.FirstOrDefault(encoder => encoder.MimeType == mimeType); 
    } 
    } 
+1

這是一個研究得非常糟糕的問題。你甚至沒有說你想在目標GPU上工作的API /框架。請編輯您的問題,以包含更多關於您正在嘗試做什麼以及您不明白的信息。 – talonmies 2012-08-16 20:29:54

+0

好吧,隨着我發佈的代碼,我想在GPU中運行這些功能,我正在.NET框架3.5和使用visualstudio 2008。我不熟悉的是爲了增加對這些函數的gpu支持。 – 2012-08-17 04:43:15

+0

你已經在問題中說過了。但是你甚至沒有說你編寫* GPU代碼時計劃的語言和API。如果你甚至沒有關於這個的想法,你還沒有準備好提出一個關於StackOverflow的實現細節的問題。 – talonmies 2012-08-17 05:16:34

回答

4
  • 首先你需要支持CUDA的顯卡至少2.0。
  • 然後,您必須安裝NVidia的CUDA驅動程序。搜索 CUDA工具包。
  • 然後,你需要在你的項目中(就像你 與OpenCV的dll文件所做的那樣)的CUDA的dll
  • 然後,你需要使用CV.GPU命名空間
  • 然後你用合適的替換所有的功能GPU版本。 在你的代碼中我沒有看到任何OpenCV函數,所以 沒有任何替代。 (但我可能會缺少一些)