程序仅正确旋转方形图像
Program only rotates square images properly
我一直在尝试在C++上使用PGM文件,获取它们的底片等。 现在,一旦我开始旋转,我有一个关于我们如何旋转矩阵的粗略伪代码,这是数字矩阵的结果:
旋转矩阵测试
在纸面上,这似乎是对的。现在,当我应用相同的算法来旋转图像时,它只能在方形图像(即相同的高度和宽度(上正常工作:
旋转的方形图像
但是在矩形图像上,它会产生这样的结果:
旋转矩形图像
代码如下:
void loadRotMatrix()
{
//transpose of matrix
for(int i=0;i<cols;i++)
{
for(int j=0;j<rows;j++)
{
rotatedmatrix[i][j] = matrix[j][i];
}
}
//flipped transposed
for(int i=0;i<rows;i++)
{
int temp =0;
for(int j=0,k=cols-1;j<k;j++,k--)
{
temp=rotatedmatrix[j][i];
rotatedmatrix[j][i]=rotatedmatrix[k][i];
rotatedmatrix[k][i]=temp;
}
}
}
现在我无法解码这里发生的事情以及是什么让我的狗变成地狱犬:p
当图像不是矩形时,数组的形状(宽度和高度(会有所不同。
您需要将数组旋转到不同的数组中,以使索引有意义。
int sourceMatrix[100][200];
int destMatrix[200][100];
不能翻转或转置非方阵。在做数学之前,添加额外的行或列以制作矩阵正方形,进行数学运算,然后将添加的列或行剥离回来以获得没有填充的原始图像。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 为什么 BMP 图像上的 imwrite 会卡住/不返回?
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- 如何使用CImg打开图像?
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 程序仅正确旋转方形图像