Fehler beim Laden des Bildes in den GPU Speicher



  • Hi Leute,

    Ich habe da ein Problem, wo ich nicht weiter komme.

    Also ich verwende MS Visual Studio 2013 mit OpenCV damit hab ich zugriff auf diverse Bildverarbeitungsfunktionen und mit OpenCL welches OpenCV unterstützt kann ich die Berechnung auf GPU auslagern.
    Als Grafikkarte verwende ich AMD 6950 mit aktuellsten Treibern mit AMD SDK 3.0Beta.

    Nun wenn ich die Kantendetektion canny auf der CPU durchführe funktioniert alles ich krieg das richtige kanten detektierte Bild raus.

    Aber wenn ich auf die GPU auslagere funktioniert zwar auch alles also ich krieg keine Fehlermeldung raus aber als Ausgangsbild kommt nur ein schwarzes Bild raus, was falsch ist.

    Also mit breakpoints habe ich den Code analysiert, und das Problem fängt schon beim Laden des Bildes in den GPU-Speicheran ("Speicher kann nicht gelesen werden bzw Fehler beim Lesen der Zeichen der Zeichenfolge") die rows und cols stimmen nicht sollte 800 und 600 stehen also die Auflösung des Bildes 800x600.--> siehe Bild.
    Wäre super wenn ihr mir helfen könnt.

    http://fs1.directupload.net/images/141230/temp/r5sh7p7i.jpg

    #include <iostream>
    #include <stdio.h>
    
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/ocl/ocl.hpp>   //Include File for OpenCL (GPU)
    #include <opencv2/opencv.hpp>    
    
    using namespace cv;
    
    int main(int argc, char *argv[])
    {
    
     Mat src = imread("car2.jpg", 0);   //load Image from dictionary
     ocl::oclMat d_src(src);            //Upload image from CPU to GPU Memory
     ocl::oclMat d_dst;                 //Allocate a temp output image on the GPU
     ocl::bilateralFilter(d_src, d_dst, -1, 50, 7);   // Filterberechnung1 GPU
     ocl::Canny(d_dst, d_dst, 35, 200, 3);            //Filterberechnung2 GPU
     Mat dst(d_dst);                  //Download image from GPU to CPU Memory
     imwrite("car800x600.png", dst);  //Output the Image to dictionary
    }
    


  • Und nach imread() ist src.data!=nullptr ?



  • Furble Wurble schrieb:

    Und nach imread() ist src.data!=nullptr ?

    Im src data ist noch alles in Ordnung kann auch erfolgreich ausgeben lassen.

    rows:600
    cols:800
    (src).data:0x0000000000393990

    Das Problem entsteht beim Laden des Bildes vom src in d_src (GPU Speicher)

    rows:-858993460
    cols:-858993460
    (d_src).data:0xcccccccccccccccc <Fehler beim Lesen der Zeichen der Zeichenfolge.>

    Es sieht irgendwie nach einem überlauf des Speichers aus oder?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    probiere es mal auf einer modernen AMD gpu aus, kann sein dass deine nur zu alt ist und du sparst dir viel kopfzerbrechen 🙂


Anmelden zum Antworten