Я пытаюсь установить значения RGB для некоторых пикселей в двоичном изображении. Но всякий раз, когда координата больше (89, 89), она дает мне ошибку утверждения! Мое разрешение изображения в порядке, потому что я обращаюсь к значениям RGB из (150, 150) координат. Если координата (89, 89) или меньше, она работает нормально. Мой код:Установка значений RGB пикселей в определенном изображении в openCV
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<Vec3b>(150, 150)[0] = 255;
img_bw.at<Vec3b>(150, 150)[1] = 255;
img_bw.at<Vec3b>(150, 150)[2] = 255;
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bw.at<Vec3b>(150, 150)<<std::endl;
Здесь, если я поставил 89 вместо 150 в разделе «Настройка BGR», тогда он работает. В противном случае полная ошибка:
OpenCV Ошибка: не удалось Assertion (тускнеет < = 2 & & данные & & (без знака) i0 < (без знака) size.p [0] & & (без знака) (i1 * DataType < _Tp > :: каналы) < (без знака) (size.p 1 * каналы()) & & ((((SizeOf (size_t) < < 28) | 0x8442211) >> ((DataType < _Tp> :: глубина) & ((1 < < 3) - 1)) * 4) & 15) == elemSize1()) в cv :: Mat :: at, файл e: \ opencv \ opencv \ build \ include \ opencv2 \ core \ mat.hpp, строка 538
Так это ошибка любого типа в памяти? Заранее благодарим за помощь! :)
ОБНОВЛЕНИЕ: Я пробовал это так! Но теперь результат пуст.
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<uchar>(150, 150) = 255;
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bw.at<uchar>(150, 150)<<std::endl;
Мой тестовое изображение здесь
И выход здесь
Ваш img_bw имеет серый цвет. Таким образом, вы не можете получить доступ к любому пикселю, набрав img_bw.at. Вместо этого следует использовать img_bw.at (150,150) = 255 –
alex
@alex Я уже пробовал это. В этом случае мой std :: cout < (150,150) просто пуст! –
@TousifZaman Мы не можем исправить код, который вы нам не показываете. Вы знаете, что использование 'Vec3b' неверно. Если вы покажете нам свой код с помощью 'uchar' вместе с ошибкой и вашим входным изображением, возможно, мы сможем вам помочь. – beaker