はい、私はこれのための関数があることを知っていますが、これはOpenCVの基本を学ぶための(非常に単純な)関数です。
擬似コードを5回チェックしましたが、これは論理的なエラーではないと確信しています。
#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];
}
}