C++, OpenCV : échec de l'Assertion dans le Redimensionner
Comme un C++ débutant, je suis actuellement confronté à un problème que j'ai en quelque sorte peut pas résoudre, même si le code est assez simple.
J'ai été à la recherche pour réponses partout sur l'Internet, mais aucune n'a été applicable pour mon problème.
Je suis actuellement en train de codage de base SVMs avec C++, en vertu de VS2013, à l'aide d'OpenCV 2.4.8.
J'ai pu travailler sur des images de même taille, en précisant fixe la hauteur, la largeur, au début de mon code.
Maintenant, je suis en train de : ouvrez les images de différentes tailles, de les redimensionner pour une certaine taille plus faible, et d'appliquer le code précédent pour le maintenant-redimensionnée dataset. Simple que cela.
Voici le début de mon code :
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/ml/ml.hpp>
#include <iostream>
#include <math.h>
#include <fstream>
#include <string>
#include <sstream>
#include <windows.h>
using namespace cv;
using namespace std;
int main(){
Paramètres d'entrée sont :
int Nb_Data_Class_1 = 10;
int Nb_Data_Class_0 = 5;
int Height_Zone = 200;
int Width_Zone = 200;
donc je vais redimensionner tous mes fichiers de format 200x200.
string Path = "C:\\Users\\....";
string Format = ".jpg";
int Nb_Files = Nb_Data_Class_1 + Nb_Data_Class_0;
Mat TrainingMat(Nb_Files, Zone_Image, CV_32FC1);
Mat TrainingLabels(Nb_Files, 1, CV_32FC1);
Pour chaque fichier de la classe étiquetés {1} - ils sont tous nommés Tree01, Tree02, etc. - Je l'ai ouvert, et de les redimensionner.
for (int i = 0; i < Nb_Data_Class_1; ++i)
{
stringstream ss;
ss << Path << "\\Tree0" << i + 1 << Format;
Mat Image = cv::imread(ss.str(), 0);
resize(Image, Image, Size(Width_Zone, Height_Zone));}
Choses a parfaitement fonctionné sans la dernière ligne. J'avais un Tapis de tableau, rempli de 0-t0-255 numéros. Maintenant, j'obtiens l'erreur suivante :
OpenCV Erreur: échec de l'Assertion >0> cv::resize fichier C:\builds\2-4-PackSlave-win32-vc12-shared\opencv\modules\imgproc\serc\imgwarp.cpp ligne 1824
Quel pourrait être le problème ?
J'ai pensé que peut-être OpenCV n'était pas bien d'ouvrir les fichiers ; mais, dans ce cas, comment tout cela pourrait avoir été préalablement de travail ?
Vous vous demandez encore.
Toute aide serait grandement appréciée ! Merci à l'avance.
Image
est en train de lire..?imread échoue silencieusement, si le fichier n'a pas été trouvé, afin de vérifier de nouveau le chemin. aussi, ce qui devrait
string Path = "C:\\Users\\....";
point ? (.... l'air suspect )@scapy : j'ai utilisé
cout << Image << endl;
sur une petite taille de la matrice de voir ce qui se passait. J'ai observé une matrice de 0 à 255 nombre (pas tous égaux à 0 ou 255, par la voie), j'ai donc pensé que imread était le travail. Est-il une autre façon de voir si c'est le cas ? @berak : le chemin d'accès est : string Path "C:\\Users\\Parveez\\SVM_Images"
par exemple. N \\ à la fin.
OriginalL'auteur Parveez | 2014-02-05
Vous devez vous connecter pour publier un commentaire.
La seule raison pour redimensionner pour écraser l'absence de l'Image. Même si vous avez coché que certaines images ont été lues correctement, cela ne veut pas dire que tous étaient, certains d'entre eux peuvent être manquantes. La lecture de fichiers à partir du disque, est un point de défaillance pour les programmes parce que vous ne pouvez jamais être sûr si la lecture a été avec succès ou non. En conséquence chaque fois que vous lisez une image que vous vraiment devriez vraiment vérifier qu'il n'est pas vide:
if(!src.data)
bien que je ne vois pas pourquoi la vérification decols
serait différent.OriginalL'auteur Michael Burdinov
Ne va pas résoudre le problème dans cette affaire, mais cette affirmation peut aussi être causée par essayer de redimensionner une
Mat
avec un type signé commeCV_8SC3
. Par exemple:Noter que la vérification de
wrong.cols != 0
n'empêchera pas ce à partir de la plante.J'ai peur que le code source ci-dessus est la seule source que je connaisse. Exécutez le code et vérifiez que vous obtenez une assertion. J'ai trouvé cette après, j'ai eu l'affirmer, ce qui m'a conduit ici, je ne pense pas que c'est documenté nulle part. Ce code a été pour la 2.4, il peut être différent dans la version 3.0, une mise à jour ici serait appréciée.
J'ai eu le même problème avec 3.2 . Merci pour cette question, c'était, me rend fou.
OriginalL'auteur Rick Smith
Votre ligne:
ss << Chemin << "\Tree0" << i + 1 << Format;
(où i=0):
"C:\Users\....\Tree01.jpg".
Solution
Changement "string Path = "C:\Users\....";" ligne:
string Path = "C:\Users";
et
le changement "ss << Chemin << "\Tree0" << i + 1 << Format;" pour:
ss << Chemin << "Tree0" << i + 1 << Format;
OriginalL'auteur Shevon Silva