Я пытаюсь распечатать cv :: Mat, который содержит мое изображение. Однако всякий раз, когда я печатаю Mat с использованием cout, 2D-массив печатается в текстовом файле. Я хочу напечатать один пиксель только в одной строке. Как я могу напечатать мудрый пиксель линии cv :: Mat.Печать cv :: Mat opencv
2
A
ответ
0
Общий цикл for_each, вы можете использовать его, чтобы распечатать данные
/**
*@brief implement details of for_each_channel, user should not use this function
*/
template<typename T, typename UnaryFunc>
UnaryFunc for_each_channel_impl(cv::Mat &input, int channel, UnaryFunc func)
{
int const rows = input.rows;
int const cols = input.cols;
int const channels = input.channels();
for(int row = 0; row != rows; ++row){
auto *input_ptr = input.ptr<T>(row) + channel;
for(int col = 0; col != cols; ++col){
func(*input_ptr);
input_ptr += channels;
}
}
return func;
}
использовать его как
for_each_channel_impl<uchar>(input, 0, [](uchar a){ std::cout<<(size_t)a<<", "; });
вы могли бы сделать некоторые оптимизации для непрерывного канала, то это может выглядеть как
/**
*@brief apply stl like for_each algorithm on a channel
*
* @param
* T : the type of the channel(ex, uchar, float, double and so on)
* @param
* channel : the channel need to apply for_each algorithm
* @param
* func : Unary function that accepts an element in the range as argument
*
*@return :
* return func
*/
template<typename T, typename UnaryFunc>
inline UnaryFunc for_each_channel(cv::Mat &input, int channel, UnaryFunc func)
{
if(input.channels() == 1 && input.isContinuous()){
return for_each_continuous_channels<T>(input, func);
}else{
return for_each_channel_impl<T>(input, channel, func);
}
}
Этот тип общих циклов меня много раз, надеюсь, вы найдете его полезным. Если t вот любые ошибки, или у вас есть идея лучше, пожалуйста, скажите мне.
Я хотел бы разработать некоторые общие алгоритмы для opencl тоже, к сожалению, он не поддерживает шаблон , я надеюсь, что однажды CUDA станет открытым стандартом, или opencl будет поддерживать шаблон.
Это работает для любого количества каналов, если тип каналов базируется на байте, а не байт канал может не работать.
Смежные вопросы
- 1. OpenCV: Partitioning cv :: Mat
- 2. openCV cv :: mat release
- 3. Сортировка cv :: Mat in OpenCv
- 4. Gnuplot, Opencv. Вывести гистограмму из cv :: Mat
- 5. Случайный порядок shuffle cv :: Mat in OpenCV
- 6. OpenCV cv :: Mat релиз бесплатно Память
- 7. Преобразование numpy.ndarray в opencv cv :: Mat
- 8. Желание сгладить cv :: Mat in opencv
- 9. Неполный тип «cv :: Mat» opencv C++
- 10. openCV mix IplImage with cv :: Mat
- 11. OpenCV CV :: Mat and Eigen :: Matrix
- 12. convert cv :: Mat to Cvmat * в OpenCV
- 13. OpenCV 2.4: Отображение cv :: Mat in MFC
- 14. правильно заменить cv :: Mat собственным ROI (opencv)
- 15. OpenCV: Является ли cv :: mat как shared_ptr?
- 16. OpenCV cv :: Mat to short * (избегая memcpy)
- 17. C++ OpenCV Макс. Емкость хранилища cv :: Mat
- 18. Максимальный одноканальный cv :: Mat from multi channel cv :: Mat
- 19. Преобразование между cv :: Mat и arma :: mat
- 20. Получение значений cv :: Mat
- 21. cv :: Mat detect PixelFormat
- 22. UIImage to cv :: Mat CV_8UC3
- 23. Как мне преобразовать Emgu :: CV :: Mat в OpenCV cv :: Mat и наоборот?
- 24. Как использовать cv :: Mat :: convertTo
- 25. Скопировать vtkImageData в cv :: Mat
- 26. Объявить cv :: Mat of NaN
- 27. opencv cv :: матовое распределение
- 28. Плохой адрес в cv :: Mat
- 29. Copy Mat in opencv
- 30. скопируйте opencv :: Mat to a Mat *