先看一个简单的例子
代码:
// ConsoleApplication3_6_23.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<opencv2/opencv.hpp> #include<iostream> #include<vector> using namespace std; using namespace cv; int _tmain(int argc, _TCHAR* argv[]) { Mat src,dst,dst1,dst2; src = imread("test.png"); if(!src.data) return -1; namedWindow("原图",CV_WINDOW_AUTOSIZE); namedWindow("x--",CV_WINDOW_AUTOSIZE); namedWindow("y--",CV_WINDOW_AUTOSIZE); imshow("原图",src); int nr = src.rows; int nc = src.cols; /************************************************************************/ /* x方向 */ /************************************************************************/ dst = src.clone(); for (int i = 0;i < nr;++i) { for (int j = 0;j < nc;++j) { dst.at<Vec3b>(i,j) = src.at<Vec3b>(i,nc-j-1); } } imshow("x--",dst); /************************************************************************/ /* y方向 */ /************************************************************************/ src.copyTo(dst1); for (int i = 0;i < nr;++i) { for (int j = 0;j < nc;++j) { dst1.at<Vec3b>(i,j) = src.at<Vec3b>(nr-i-1,j); } } imshow("y--",dst1); waitKey(0); return 0; }
1、Mat的ptr和[]
void image_rever(Mat& src,Mat& dst) { int nr = src.rows; int nc = src.cols; int ch = src.channels(); for (int i = 0;i < nr;++i) { uchar* srcr = src.ptr<uchar>(i); uchar* dstr = dst.ptr<uchar>(i); for (int j = 0;j < nc;++j) { dstr[ch * j + 0] = srcr[ch * (nc - j - 1) + 0]; dstr[ch * j + 1] = srcr[ch * (nc - j - 1) + 1]; dstr[ch * j + 2] = srcr[ch * (nc - j - 1) + 2]; } } }
opencv-从图像旋转学习Mat数据访问,布布扣,bubuko.com
时间: 2024-10-20 17:16:09