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);
}
の
CV_LOAD_IMAGE_COLOR
を使用する必要がありますが助けてくれてありがとう:) – Generwp