3

私は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

グレーとカラーの画像で、そして、、、で試してみましcvtColorCV_8UCV_32FC1さとしてC3常に0を計算します。

私はOpenCVのマニュアルとOpenCV-2.3.1/modules / core / include / opencv2 / core / types_c.hに何時間も費やしましたが、解決策が見つかりません。オブジェクトの深さをどのように変換するかについて、少し混乱したと思いMatます。

4

2 に答える 2

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);
}

そして、以下は私が得た出力です:

ここに画像の説明を入力してください

于 2012-07-16T15:43:58.633 に答える
0

より良い結果を得るには、次の行を入れ替えます。

    cv::normalize(fg,fg,0,255,cv::NORM_MINMAX);
    cv::convertScaleAbs(fg,fg);
于 2014-01-10T14:55:57.823 に答える