OpenCV(4.8.0)-Fehler: Die Funktion/Funktion ist nicht implementiert () in cv::debug_build_guard::_OutputArray::assignPython

Python-Programme
Anonymous
 OpenCV(4.8.0)-Fehler: Die Funktion/Funktion ist nicht implementiert () in cv::debug_build_guard::_OutputArray::assign

Post by Anonymous »

Ich versuche, Python-Code in C++ zu übersetzen, und stoße auf diesen Code:

Code: Select all

self.net = cv.dnn.readNetFromDarknet(cfg_file, weights_file)
self.net.setPreferableBackend(cv.dnn.DNN_BACKEND_OPENCV)
self.ln = self.net.getLayerNames()
self.ln = [self.ln[i-1] for i in self.net.getUnconnectedOutLayers()]
...
blob = cv.dnn.blobFromImage(img, 1/255.0, (416, 416), swapRB=True, crop=False)
self.net.setInput(blob)
outputs = self.net.forward(self.ln)
outputs = np.vstack(outputs)
Wie Sie sehen können, übernimmt der Code die Ausgabe von net vorwärts von den nicht verbundenen Ebenennamen, die in self.ln angegeben sind. Hier ist nun mein C++-Code:

Code: Select all

static Mat blobFromImg;
bool swapRB = true;
blobFromImage(img, blobFromImg, 1/255.0, Size(416, 416), Scalar(), swapRB, false);
network.setInput(blobFromImg);
Mat outMat;
network.forward(outMat , network.getUnconnectedOutLayersNames());
vconcat(outMat, outMat);
Wie Sie sehen können, verwende ich cv::vconcat anstelle von np.vstack, anstatt einen neuen std::vector zu erstellen, der an network.forward() übergeben wird. Ich verwende getUnconnectedOutLayersNames(). Dennoch erhalte ich diese Fehlermeldung:

OpenCV(4.8.0) Error: The function/feature is not implementiert () in cv::debug_build_guard::_OutputArray::assign, Datei D:\vcpkg\buildtrees\opencv4\src\4.8.0-2bf495557d.clean\modules\core\src\matrix_wrap.cpp, Zeile 2052

Die Zeile, in der die Ausnahme auftritt, ist network.forward(). Aufgrund dieser Methode gibt network.getUnconnectedOutLayersNames() die Ausnahme nicht selbst aus.
Wenn ja:

Code: Select all

std::vector ln;
auto layers = network.getLayerNames();
for (auto i : network.getUnconnectedOutLayers()){
ln.push_back(layers[i-1]);
}
...
network.setInput(blobFromImg);
Mat outMat;
network.forward(outMat , ln);
vconcat(outMat, outMat);
Ich erhalte das gleiche Ergebnis.
Warum ist die Funktion nicht implementiert? Warum hat Python diese Implementierung?
Hinweis: Ich verwende Darknet/Yolo.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post