程序以转换图像和旋转

Program to convert image and rotate

本文关键字:旋转 图像 转换 程序      更新时间:2023-10-16

我一直在尝试使用openCV在C 中制作此程序,将图像转换为灰度并之后旋转图像,但是我得到的输出是所有的。

我一直在寻找解决方案并在各处寻求帮助,但是我无法找到我做错了什么,所以如果你们中有人能帮助我,那就太好了

代码:http://pastebin.com/fsjkyaeu

另外,这是我得到的输出的图片https://i.stack.imgur.com/umguj.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);

另外,xyFuncRotate中不使用。

此外,我相信您应该将imRotate初始化为零。