Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CImg镜像图像? 这个标题很自我解释,但我强调我是C++初学者,尤其是当它进入CIMG库时。这是我到目前为止的代码,我尝试过使用flipped_idx进行实验,当它被合并到代码中时不起作用,但我认为我没有朝着正确的方向前进。或者我是,任何帮助都将不胜感激_C++_Cimg - Fatal编程技术网

使用CImg镜像图像? 这个标题很自我解释,但我强调我是C++初学者,尤其是当它进入CIMG库时。这是我到目前为止的代码,我尝试过使用flipped_idx进行实验,当它被合并到代码中时不起作用,但我认为我没有朝着正确的方向前进。或者我是,任何帮助都将不胜感激

使用CImg镜像图像? 这个标题很自我解释,但我强调我是C++初学者,尤其是当它进入CIMG库时。这是我到目前为止的代码,我尝试过使用flipped_idx进行实验,当它被合并到代码中时不起作用,但我认为我没有朝着正确的方向前进。或者我是,任何帮助都将不胜感激,c++,cimg,C++,Cimg,我正在输入下面的前两张图片,并将它们合并成一张图片 这是我试图在y轴上镜像的合并图像 如果我尝试尽可能地坚持您的代码,但放弃所有显示内容,我会得到以下结果: #include <iostream> #include "CImg.h" using namespace std; using namespace cimg_library; const int imgscale = 400; int main() { CImg<unsigned char> player(

我正在输入下面的前两张图片,并将它们合并成一张图片

这是我试图在y轴上镜像的合并图像


如果我尝试尽可能地坚持您的代码,但放弃所有显示内容,我会得到以下结果:

#include <iostream>
#include "CImg.h"

using namespace std;
using namespace cimg_library;

const int imgscale = 400;

int main() {

CImg<unsigned char> player("player.bmp");
CImg<unsigned char> bg("forest.bmp");

CImg<unsigned char> merged(player.width(), player.height(),1,3,0);
int w = player.width();
int h = player.height();
int imglen = w*h;
CImg<unsigned char> result;

for (int i = 0; i < h; ++i) {
    for (int j = 0; j < w; ++j) {
        int idx = j + i*w;

        unsigned char colorR = player[idx];
        unsigned char colorG = player[idx + imglen];
        unsigned char colorB = player[idx + imglen * 2];

        if (colorG > 215 && colorR < 255) {
            //Background
            merged[idx] = bg[idx]; //red
            merged[idx + imglen] = bg[idx + imglen]; //green
            merged[idx + imglen * 2] = bg[idx + imglen * 2]; //blue
        }
        else {
            //Foreground
            merged[idx] = player[idx]; //red
            merged[idx + imglen] = player[idx + imglen]; //green
            merged[idx + imglen * 2] = player[idx + imglen * 2]; //blue
        }
    }
}

result = merged.get_mirror('y');
result.save("merged.bmp");
}
如果我在编写代码,我可能会使用更像这样的东西:

#include <iostream>
#include "CImg.h"

using namespace std;
using namespace cimg_library;

int main() {

   CImg<unsigned char> player("player.bmp");
   CImg<unsigned char> bg("forest.bmp");
   CImg<unsigned char> merged(player.width(), player.height(),1,3,0);
   CImg<unsigned char> result;

   // Extract Green channel and make into mask by thresholding
   CImg<unsigned char> mask = player.get_channel(1).threshold(215);
   mask.save("mask.bmp");

   // Select background or foreground according to mask
   merged = bg.mul(mask) + player.mul(1-mask);
   merged.save("merged.bmp");

   // Mirror and save
   result = merged.get_mirror('y');
   result.save("result.bmp");
}
仅供参考,面具看起来像这样:

#include <iostream>
#include "CImg.h"

using namespace std;
using namespace cimg_library;

int main() {

   CImg<unsigned char> player("player.bmp");
   CImg<unsigned char> bg("forest.bmp");
   CImg<unsigned char> merged(player.width(), player.height(),1,3,0);
   CImg<unsigned char> result;

   // Extract Green channel and make into mask by thresholding
   CImg<unsigned char> mask = player.get_channel(1).threshold(215);
   mask.save("mask.bmp");

   // Select background or foreground according to mask
   merged = bg.mul(mask) + player.mul(1-mask);
   merged.save("merged.bmp");

   // Mirror and save
   result = merged.get_mirror('y');
   result.save("result.bmp");
}

请显示输入图像和预期的输出图像。另外,为什么删除了所有的include语句和主程序?它使人们不太可能费心去尝试和帮助你…我编辑了它!如果这是输入图像,请同时显示结果。如果是结果,请同时显示输入,并说出哪个是哪个。我也编辑了它。我的答案解决了你的问题了吗?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢