2012-07-16 15 views
3

我努力學習OpenCV的,我想將此簡單的公式: enter image description hereOpenCV的:變化的深度和日誌變換

也就是說每個像素的操作,並從[R改造像素小號

這是我的代碼:

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 

我有灰色和彩色圖像嘗試,並與cvtColorCV_8UCV_32FC1C3,但我總是作爲深度 ..

我花了數小時OpenCV手冊和OpenCV-2.3.1 /模塊/核心/包括/ opencv2 /核心/ types_c.h但.. ..我找不到解決方案。我想我已經對如何變換深度的對象做了一些混淆。

+0

我沒有問題,與FLOAT32圖像。 – 2012-07-16 15:25:08

+0

抱歉,您使用的是什麼版本的opencv和哪個圖像? – nkint 2012-07-16 15:29:23

+0

我用灰度圖像,但在Python中使用opencv 2.4.1。 – 2012-07-16 15:30:00

回答

6

確定你已將該圖片轉換爲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); 
} 

及以下的輸出我得到:

enter image description here

+2

你的例子非常清楚,謝謝 – nkint 2012-07-16 16:29:58

0

交換以下幾行,以獲得更好的結果:

cv::normalize(fg,fg,0,255,cv::NORM_MINMAX); 
    cv::convertScaleAbs(fg,fg); 
+0

你應該添加這個作爲評論或編輯的答案。 – 2014-12-04 09:50:02