是的,我知道有一个功能,但这是学习 OpenCV 基础知识的(非常简单的)功能。
我检查了伪代码五次,很确定这不是逻辑错误。
#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main(int argc, const char *argv[])
{
if (argc!=2 || argv[1]=="") {
printf("No image specified.");
exit(-1);
}
Mat im, out;
const string fn = argv[1];
im = cv::imread(fn);
out.create(im.cols, im.rows, CV_8UC3);
//int tmp = 0;
for (int i = 0; i < out.rows; i++) {
for (int j = 0; j < out.cols; j++) {
out.at<cv::Vec3d>(i, j) = im.at<cv::Vec3d>(im.rows-1-j, i);
/*
*if (tmp<1000) {tmp++;}
*else {imwrite("/tmp/out.png", out); tmp=0;}
*/
}
}
imwrite("/tmp/in.png", im);
imwrite("/tmp/out.png", out);
return 0;
}
我注意到图片中的宽度恰好被拉伸了 3 倍(1px→3px)。
另外,返回时出现分段错误。
更新:
这是伪代码:
for(row=0; row<out.rows; row++) {
for(col = 0; col<out.cols; col++) {
out[row][col] = in[(in.rows-1)-col][row];
}
}