程序以转换图像和旋转
Program to convert image and rotate
我一直在尝试使用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);
...因为i
和j
应该在原始图像上循环吗?
也许您的意思是:
imRotate.at<unsigned char>(NewXPixel,NewYPixel) = im.at<unsigned char>(i,j);
另外,x
和y
在FuncRotate
中不使用。
此外,我相信您应该将imRotate
初始化为零。
相关文章:
- 程序仅正确旋转方形图像
- 在C++中使用OpenCV矩阵中的特征将图像旋转90度
- 无法编译此图像旋转代码
- 如何使用OpenCV从图像中检测旋转对象
- 逐像素旋转和翻转图像
- 使用接口上的C 旋转图像
- 在QML中旋转图像时降低CPU使用情况
- 旋转图像不起作用
- Openframeworks-通过OpenGL调用从图像中心旋转图像
- 如何在QT QWidgets C++中围绕图像中心旋转图像
- 如何在 openGL 中旋转图像
- 轻松BMP旋转图像到任何角度
- 在 C 语言中旋转图像对象和指针
- 在画布上绘制旋转图像
- BMP旋转图像
- 程序旋转图像时发生内存泄漏
- 如何在旋转图像时填充边框
- 在opengl中寻找旋转图像的中心
- 在opencv中裁剪旋转图像
- 旋转图像PPM