图像转置的MATLAB和OpenCV源码

注意,图像转置和图像旋转是两回事,图像转置只是把图像的行坐标和列坐标互换,程序实现起来非常简单!而图像旋转则是将图像旋转多少度!

图像转置的英文为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;  

}  

运行结果如下图所示:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值