Как связать изображение с другим изображением в OpenCV - PullRequest
1 голос
/ 03 февраля 2020

Я делаю этот проект в OpenCV C ++, где я делаю отражение данного изображения, точно так же, как функция переворачивания, но с координатами каждого пикселя. проблема в том, что все полученное изображение выводится синим цветом с горизонтальной линией, я считаю, что мой код влияет только на первый канал.

Я попытался сделать imageReflectionFinal.at<Vec3b>(r,c) = image.at<Vec3b>(r,c);, чтобы решить его, но Ничего не изменилось. Я оставлю код ниже, спасибо заранее.

    Mat image = imread("image_dir/image.jpg");
    Mat imageReflectionFinal = Mat::zeros(image.size(), image.type());
    for(unsigned int r=0; r<image.rows; r++) {
        for(unsigned int c=0; c<image.cols; c++) {
                imageReflectionFinal.at<Vec3b>(r,c) = image.at<Vec3b>(r,c);
                Vec3b sourcePixel = image.at<Vec3b>(r,c);
                imageReflectionFinal.at<Vec3b>(r, c) = (uchar)(c, -r + (220)/2);
        }
    }

1 Ответ

3 голосов
/ 04 февраля 2020

Если вы не хотите использовать функцию flip , вы можете изменить x-координаты (столбцы) каждой строки зеркально. Вот код:

#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

using namespace cv;

int main() {

    //You can change as "Mat3b" for the 3-channel images
    Mat1b image = imread("/ur/image/directory/image.jpg",CV_LOAD_IMAGE_GRAYSCALE);
    Mat1b imageReflectionFinal = Mat::zeros(image.size(), image.type());
    for(unsigned int r=0; r<image.rows; r++) {
        for(unsigned int c=0; c<image.cols; c++) {

            imageReflectionFinal(r, c) = image(r, image.cols - 1 - c);
            //y-axis(r) doesnt change only x-axis(cols) mirroring 
        }
    }

    imshow("Result",imageReflectionFinal);
    waitKey(0);
    return 0;
}

Этот ответ также является моей ссылкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...