OpenCV: изменение глубины и преобразование журнала
Я пытаюсь изучить OpenCV и хочу применить эту простую формулу:
Это операция на пиксель и преобразование пикселя из r в s.
Вот мой код:
int main(int /*argc*/, char** /*argv*/) {
Mat _img = imread("lena.jpg");
cvtColor(_img, img, CV_32F);
cout << "original image size: " << img.rows << " " << img.cols << endl;
cout << "original type: " << img.type() << endl;
cout << "original depth: " << img.depth() << endl;
Mat _src = img.clone();
_src += 1;
log(_src, logContrast);
logContrast *= log_c;
/// ...
И я получаю эту ошибку:
OpenCV Error: Assertion failed (depth == CV_32F || depth == CV_64F) in log, file /home/user/Documents/Code/OpenCV-2.3.1/modules/core/src/mathfuncs.cpp, line 1772
terminate called after throwing an instance of 'cv::Exception'
what(): /home/alberto/Documents/Code/OpenCV-2.3.1/modules/core/src/mathfuncs.cpp:1772: error: (-215) depth == CV_32F || depth == CV_64F in function log
Я попробовал с серым и цветным изображением, и с cvtColor
с CV_8U
, CV_32F
и еще C1
, C3
, но я всегда называю 0 глубиной ..
Я потратил часы на руководства OpenCV и на в формате OpenCV-2.3.1/модули/ядро/включить/opencv2/основных/ types_c.ч, но.. Я не могу найти решение. Я думаю, что я сделал некоторую путаницу о том, как преобразовать глубину объекта Mat
.
2 ответа:
Вы уверены, что преобразовали изображение в float32 ?
Пожалуйста, проверьте код ниже, я только что написал. Не знаю, верен ли вывод, но он не вызвал никаких ошибок.
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> using namespace std; int main () { cv::Mat binary = cv::imread("kick.jpg",0); cv::Mat fg; binary.convertTo(fg,CV_32F); fg = fg + 1; cv::log(fg,fg); cv::convertScaleAbs(fg,fg); cv::normalize(fg,fg,0,255,cv::NORM_MINMAX); cv::imshow("a",fg); cv::waitKey(0); }
И ниже вывод, который я получил: