Сначала создайте изображение маски, используя свои четыре координаты.
Теперь, используя Mat::copyTo(), скопируйте свое изображение balck в исходный код здесь, вы можете использовать маску выше.
Выделяют черное изображение и маску, как размер источника
Mat src=imread("img.png",1);
Mat black(src.rows, src.cols, src.type(), cv::Scalar::all(0));
Mat mask(src.rows, src.cols, CV_8UC1, cv::Scalar(0));
Теперь создайте маску изображения с помощью drawContours, здесь вы должны использовать CV_FILLED для толщины контура.
Как
vector< vector<Point> > co_ordinates;
co_ordinates.push_back(vector<Point>());
co_ordinates[0].push_back(P1);
co_ordinates[0].push_back(P2);
co_ordinates[0].push_back(P3);
co_ordinates[0].push_back(P4);
drawContours(mask,co_ordinates,0, Scalar(255),CV_FILLED, 8);
Наконец скопировать черное изображение к источнику с помощью описанной выше маски
black.copyTo(src,mask);
Смотри ниже результата,
Edit:
Основываясь на ваш комментарий ниже здесь шаги вы должны следовать
Сначала нужно создать маску изображения, как описано выше
Скопируйте источник изображения к новому Mat dst1 с использованием маски.
инвертировать маску и скопировать изображение назначения на новый Mat dst2
Для окончательного результата просто сложить dest1 и dest2 к новому Мату.
Предположим, что вы уже создали маску, как описано выше
Скопировать на новый Мат
Mat dst1;
src.copyTo(dst1,mask);
Теперь инвертировать маску и скопировать изображение назначения на новый Мат
Mat dst2;
bitwise_not(mask,mask);
dst.copyTo(dst2,mask);
Получить конечный результат путем добавления как
Mat result=dest1+dest2;
В случае ваш оба изображения имеют разный размер, то вы можете использовать следующий код
Здесь вы должны использовать ROI изображения для копирования, создать маску и т.д ..
![Mat src=imread("src.png",1);
Mat dst=imread("dest.jpg",1);
int new_w=0;
int new_h=0;
if(src.cols>dst.cols)
new_w=dst.cols;
else
new_w=src.cols;
if(src.rows>dst.rows)
new_h=dst.rows;
else
new_h=src.rows;
Rect rectROI(0,0,new_w,new_h);
Mat mask(new_h, new_w, CV_8UC1, cv::Scalar(0));
Point P1(107,41);
Point P2(507,61);
Point P3(495,280);
Point P4(110,253);
vector< vector<Point> > co_ordinates;
co_ordinates.push_back(vector<Point>());
co_ordinates\[0\].push_back(P1);
co_ordinates\[0\].push_back(P2);
co_ordinates\[0\].push_back(P3);
co_ordinates\[0\].push_back(P4);
drawContours(mask,co_ordinates,0, Scalar(255),CV_FILLED, 8);
Mat srcROI=src(rectROI);
Mat dstROI=dst(rectROI);
Mat dst1;
Mat dst2;
srcROI.copyTo(dst1,mask);
imwrite("dst1.jpg",dst1);
bitwise_not(mask,mask);
dstROI.copyTo(dst2,mask);
dstROI.setTo(0);
dstROI=dst1+dst2;
imshow("final result",dst);][4]
Привет Харис, спасибо за ваш добрый ответ. Но я не хочу, чтобы исходное изображение было черным. Я думаю, что мой вопрос был недостаточно объяснен. Итак, я снова отредактировал этот вопрос. спасибо – MMH
Значит, ваше изображение назначения имеет разный размер? – Haris
нет изображения одинакового размера. – MMH