图像转置的MATLAB和OpenCV源码
2023-09-11 14:15:39 时间
注意,图像转置和图像旋转是两回事,图像转置只是把图像的行坐标和列坐标互换,程序实现起来非常简单!而图像旋转则是将图像旋转多少度!
图像转置的英文为Transpose,而图像旋转的英文为Image Rotation 请注意区别!
下面给出图像转置的MATLAB和OpeCV源码!
源码中用到的图像的下载链接为 http://pan.baidu.com/s/1boKYKFX
首先上MATLAB源码
clear all;
close all;
clc;
A=imread('007_gray.png');
tform=maketform('affine',[0 1 0;1 0 0;0 0 1]);
B=imtransform(A,tform,'nearest');%B中存储的是经过水平镜像变换后的图像
subplot(1,2,1),imshow(A);
title('原图像');
subplot(1,2,2),imshow(B);
title('图像转置');
再上OpenCV的C源码(不使用MAT类)
#include <opencv2/opencv.hpp>
#include <opencv2/legacy/compat.hpp>
#include <fstream>
using namespace std;
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
void transpose_image(IplImage *src,IplImage *dst) //实现水平镜像变换
{
int M,N;
M=src->height;
N=src->width;
int i=0,j=0;
double temp1;
CvScalar s1;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
temp1 = cvGet2D(src,i,j).val[0];
s1.val[0]=temp1;
cvSet2D(dst,j,i,s1);
}
}
}
int main()
{
int src_height,src_width;
IplImage *pSrcImage = cvLoadImage("007_gray.png", CV_LOAD_IMAGE_UNCHANGED);
src_height=pSrcImage->height;
src_width=pSrcImage->width;
CvSize dst_size;
dst_size.height=src_width;
dst_size.width=src_height;
IplImage *pOutImage = cvCreateImage(dst_size, IPL_DEPTH_8U,1);
transpose_image(pSrcImage,pOutImage);
const char *pstrWindowsATitle = "原图";
const char *pstrWindowsBTitle = "变换后的图";
//创建窗口
cvNamedWindow(pstrWindowsATitle, CV_WINDOW_AUTOSIZE);
cvNamedWindow(pstrWindowsBTitle, CV_WINDOW_AUTOSIZE);
//在指定窗口中显示图像
cvShowImage(pstrWindowsATitle, pSrcImage);
cvShowImage(pstrWindowsBTitle, pOutImage);
//等待按键事件
cvWaitKey();
cvDestroyWindow(pstrWindowsATitle);
cvDestroyWindow(pstrWindowsBTitle);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pOutImage);
return 0;
}
运行结果如下图所示:
再上OpenCV的C++源码(使用MAT类)
程序中使用到的图片的下载链接:http://pan.baidu.com/s/1dFv2MM9
//OpenCV版本2.4.9
//交流QQ2487872782
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
int main()
{
cv::Mat srcImage = cv::imread("pool.jpg");
if(!srcImage.data)
return -1;
// 图像转置
cv::Mat resultImage;
cv::transpose(srcImage, resultImage);
cv::imshow("srcImage", srcImage);
cv::imshow("转置后的图像", resultImage);
cv::waitKey(0);
return 0;
}
运行结果如下图所示:
相关文章
- 如何利用OpenCV读取,显示以及写入图片?
- 【MATLAB教程案例58】使用matlab实现yolov2网络目标检测功能与仿真分析
- 【MATLAB教程案例37】语音信号的端点检测方法matlab仿真学习——ZCR过零法,双门限法
- 【MATLAB教程案例31】基于matlab的人脸检测相关算法的仿真与分析——肤色模型与形态学图像处理方法
- 【MATLAB教程案例29】基于Baker映射和Logistic混沌序列的图像加解密matlab实现
- 【MATLAB教程案例25】常用图像变换域的matlab仿真分析——DFT频域,DCT域,小波域等
- 【MATLAB教程案例9】信道编译码之turbo编码译码算法matlab误码率仿真
- 【MATLAB教程案例7】基于Gardner环的定时误差检测matlab仿真
- Python-OpenCV下的窗口鼠标事件交互操作(实现鼠标移动轨迹的绘制)
- 用OpenCV实现图像的水平镜像变换(翻转)、竖直镜像变换(翻转)(又叫垂直镜像变换)的C/C++源码
- C++、C++-OpenCV、Python、Python-Numpy、MATLAB的除法取余(余数)方法总结
- 关于opencv中Mat赋值(浅拷贝,深拷贝)原理
- 在matlab和opencv中分别实现稀疏表示
- Install OpenCV 3.0 and Python 2.7+ on Ubuntu
- 【Matlab算法】粒子群算法求解一维非线性函数问题(附MATLAB代码)
- 【Matlab算法】MATLAB求解背包问题(附MATLAB代码)
- 如何在OpenCV Python中实现概率Hough Transform?
- opencv中Mat格式的数据访问.at
- 安装 openCV 2.4.10
- 【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)
- opencv摄像头捕获视频