2016-05-01 19 views
0

ディレクトリから画像を処理し、白黒(グレースケール)にして別のファイルに書き込もうとしています。私はすでにここにコードOpenCV Mat画像を白黒のエラー

#include <opencv2/opencv.hpp> 
using namespace std; 

void faktorial(int InSize, uchar *DataIn, uchar *DataOut) 
{ 
    for (int i = 0, j = 0; i < InSize; i += 3, j++) 
    { 
     DataOut[j] = (DataIn[i] + DataIn[i + 1] + DataIn[i + 2])/3; 
    } 

} 

int main() 
{ 
    char tbLEN[] = "Assassin.jpg"; 

    IplImage* image; 
    image = cvLoadImage(tbLEN, 1); 

    IplImage *image2 = cvCreateImage(cvSize(image->width, image->height), IPL_DEPTH_8U, 1); 

    int height1 = image->height; 
    int width1 = image->width; 
    int step = image->widthStep; 
    int SizeIn = step*height1; 
    int nChannels = image->nChannels; 
    uchar* DatIn = (uchar*)image->imageData; 
    uchar* DatOut = (uchar*)image2->imageData; 

    faktorial(SizeIn, DatIn, DatOut); 

    cvNamedWindow("Imagecolor"); 
    cvShowImage("Imagecolor", image); 

    cvNamedWindow("Gray"); 
    cvShowImage("Gray", image2); 
    cvWaitKey(0); 
    return 0; 
} 

があるそれは完全に正常に動作しますが、C OpenCVのは時代遅れであることから、私はC++で同じことをやろうとしているが、出力てる、OpenCVののCライブラリを使用してそれをやりましたイメージは私が期待していたイメージとはまったく異なります。間違いはどこですか?また、のimg2(img.rows、img.cols、CV_8UC3)のを使用して空のイメージを作成するときに、正しくやっていますか?

ここにコードがあります。

void faktorial(int InSize, uchar *DataIn, uchar *DataOut) 
{ 
    for(int i = 0, j = 0; i < InSize; i += 3, j++) 
    { 
     DataOut[j] = (DataIn[i] + DataIn[i + 1] + DataIn[i + 2])/3; 
    } 

} 

int main() 
{ 
     Mat img = imread("Assassin.jpg", CV_LOAD_IMAGE_UNCHANGED); 
     if (img.empty()) 
    { 
      cout << "Error : Image cannot be loaded..!!" << endl; 
      return -1; 
    } 

     uchar* DataImg = img.data; 

     int Width = img.cols; 
     int Height = img.rows; 
     int Step = img.step; 
     int SizeInImg = Step * Height; 
     Mat img2(img.rows,img.cols, CV_8UC3); 
     uchar* DataImg2 = img2.data; 
     faktorial(SizeInImg, DataImg, DataImg2); 


    namedWindow("MyWindow", CV_WINDOW_AUTOSIZE); 
    imshow("MyWindow", img2); 
} 

入力 Input

出力リレー Output

答えて

0

問題は、それが

Mat img2(img.rows,img.cols, CV_8UC1); 
0である必要があり、ここで

Mat img2(img.rows,img.cols, CV_8UC3); 

です

とあなたの代わりにCV_LOAD_IMAGE_UNCHANGED

Mat img = imread(argv[1], CV_LOAD_IMAGE_COLOR); 
+0

CV_LOAD_IMAGE_COLORを使用する必要がありますが助けてくれてありがとう:) – Generwp

関連する問題