簡體   English   中英

用於轉換圖像和旋轉的程序

[英]Program to convert image and rotate

我一直在嘗試使用opencv在c ++中創建這個程序,將圖像轉換為灰度並隨后旋轉圖像,但我得到的輸出是各種混亂。

我一直在尋找解決方案,並在各處尋求幫助,但我無法找出我做錯了什么,所以如果你們中的任何人能幫助我,那就太棒了

代碼: http//pastebin.com/FSJKyaeU

另外,這是我得到的輸出圖片http://i.imgur.com/qpYm1.jpg

請替換:

Mat imRotate(im.cols * 2, im.rows * 2, im.type());

使用這個:

  int size = static_cast<int>(sqrt(im.cols * im.cols/4 + im.rows * im.rows/4) * 2) + 1;
  Mat imRotate(size, size , im.type());

然后更新FuncRotate。 我想你需要做這樣的事情:

    void FuncRotate(Mat im, Mat imRotate, int q, int x, int y, int rows, int columns) 
    {
      double radians = (q * 3.1415)/180; // or try use M_PI instead of 3.1415
      double cosr = cos(radians);
      double sinr = sin(radians);

      for(int i=0; i<columns; i++) //columns of the original image
      {
         for(int j=0; j<rows; j++) //rows of the original image
         {
            int NewXPixel = imRotate.cols/2 + ((i-x) * cosr) - ((j-y) * sinr);
            int NewYPixel = imRotate.rows/2 + ((i-x) * sinr) + ((j-y) * cosr);
            if(NewXPixel < 0 || NewYPixel < 0 || NewXPixel >= imRotate.cols || NewYPixel >= imRotate.rows)
    continue;
  imRotate.at<unsigned char>(NewYPixel,NewXPixel) = im.at<unsigned char>(j,i);
         }
      }
    }

我認為至少這一行有問題:

imRotate.at<unsigned char>(i,j) = im.at<unsigned char>(NewXPixel,NewYPixel);

...因為ij應該在原始圖像上循環,對嗎?

也許你的意思是:

imRotate.at<unsigned char>(NewXPixel,NewYPixel) = im.at<unsigned char>(i,j);

此外,在FuncRotate中不使用xy

而且,我相信你應該將imRotate初始化為零。

暫無
暫無

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

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