Définition de valeurs RVB de pixels dans une certaine image dans openCV

J’essaie de définir les valeurs RVB de certains pixels dans une image binary. Mais chaque fois que la coordonnée dépasse (89, 89), cela me donne une erreur d’assertion! Ma résolution d’image est correcte car j’accède aux valeurs RVB à partir des coordonnées (150, 150). Si les coordonnées sont (89, 89) ou moins, cela fonctionne bien. Mon code:

cv::Mat img_gray, img_bw; //read an image cv::Mat3b img_bgr = cv::imread("test.jpg"); cv::imshow("Original Image", img_bgr); //conversion to binary from color cv::cvtColor(img_bgr, img_gray,CV_RGB2GRAY); cv::threshold(img_gray, img_bw, 75.0, 255.0, THRESH_BINARY); //accessing BGR of position (150, 150) from a color image std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bgr(150,150)<<std::endl; //Setting BGR of position (150, 150) in binary image img_bw.at(150, 150)[0] = 255; img_bw.at(150, 150)[1] = 255; img_bw.at(150, 150)[2] = 255; std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bw.at(150, 150)<<std::endl; 

Ici, si je mets 89 au lieu de 150 dans la section “Réglage BGR”, alors cela fonctionne. Sinon, l’erreur complète est:

Erreur OpenCV: l’assertion a échoué (dims <= 2 && data && (non signé) i0 <(non signé) size.p [0] && (non signé) (i1 * DataType :: channels) <(non signé) (size.p 1 * channels ()) && (((sizeof (size_t) <> ((DataType :: depth) & ((1 << 3) – 1)) * 4) & 15) == elemSize1 ()) dans cv :: Mat :: at, fichier e: \ opencv \ opencv \ build \ include \ opencv2 \ core \ mat.hpp, ligne 538

Alors, est-ce un type d’erreur d’espace mémoire? Merci d’avance pour les aides! 🙂

UPDATE: Je l’ai essayé de cette façon! Mais la sortie est vide maintenant.

 cv::Mat img_gray, img_bw; //read an image cv::Mat3b img_bgr = cv::imread("test.jpg"); cv::imshow("Original Image", img_bgr); //conversion to binary from color cv::cvtColor(img_bgr, img_gray,CV_RGB2GRAY); cv::threshold(img_gray, img_bw, 75.0, 255.0, THRESH_BINARY); //accessing BGR of position (150, 150) from a color image std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bgr(150,150)<<std::endl; //Setting BGR of position (150, 150) in binary image img_bw.at(150, 150) = 255; std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bw.at(150, 150)<<std::endl; 

Mon image de test est ici

Ceci est mon image de test ici

Et la sortie est ici

Image de sortie ici

Ok, j’ai la réponse maintenant grâce au soupçon de Beaker dans le commentaire 🙂 Je mets la solution pour aider les autres!

J’ai juste besoin de définir la sortie comme un entier. Donc, le dernier cout sera comme

 std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<(int)img_bw.at(150, 150)<