Ошибка при конвертировании cv::Mat в cv::Mat3b?

Я работаю с библиотекой OpenCv + qt. Задача сравнивать цвета пикселей матрицы с определенными цветами и выводить результат. Чтобы получить цвет использую вот:
cv::Mat3b src=src0;
    for(int r = 0; r < src.rows; ++r) {
        for(int c = 0; c < src.cols; ++c) {
          cv::Vec3b pixel = src(r,c);
            uchar blue = pixel[0];
            uchar green = pixel[1];
            uchar red = pixel[2];
            qDebug() <<"blue="<<blue <<"green=" <<green <<"red=" <<red;
           // image(r,c);
        }
    }

Mat3b получаю из Mat. Но при использовании нестандартных размеров получаю вылет с ошибкой. Можно ли это как то исправить?
В переводе ошибка значит: Общее число матричных элементов не делится на новое число строк, я делал так src.create(height,width,CV_8UC(3)) и 5, но так не работает получение пикселей цвета. Библиотеку только начал изучать, так что 80% как там чего не знаю. В другом похожем вопросе не указано, где конкретно возникала, проблема. Тут же указано где возникает проблема, я просто не знаю как ее решить и прошу помощи.
  • Вопрос задан
  • 315 просмотров
Решения вопроса 2
DevMan
@DevMan
Почему не "a" и "b"?
потому что есть такое понятие как контекст вызова.
Почему PHP иногда ведет себя так, как будто приватные методы словно наследуются?

И что сделать чтобы выводились "a" и "b", но чтобы при этом методы оставались приватными?
class B extends A {
	private function foo() {
		echo "b";
	}
	public function test() {
		$this->foo();
	}
}
Ответ написан
Комментировать
@Elun
Потому что test объявлена в scope класса A. Так как foo приватный, то и test никаким образом не может знать о том что произведена "перегрузка". Для класса B метода A.foo вообще не существует, он его не видит.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы