簡體   English   中英

OpenCV Mat圖像出現黑白錯誤

[英]OpenCV Mat image to black and white error

我正在嘗試從目錄中處理圖像,使其成為黑白(灰度),然后將其寫到另一個文件中。 我已經使用OpenCV的C庫完成了,這是代碼

#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 ++做同樣的事情,但是輸出圖像與我期望的完全不同。 錯誤在哪里? 另外,使用Mat 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);
}

輸入項 輸入項

烏普特 輸出量

問題在這里

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

它應該是

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

並且您應該使用CV_LOAD_IMAGE_COLOR而不是CV_LOAD_IMAGE_UNCHANGED

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM