#c #opencv
#c #opencv
Вопрос:
У меня есть cv::Mat
изображение RGB в виде
cv::Mat cv_img
Я хочу установить значение нулей для cv_img в некоторых позициях. Например, снизу до половины изображения будут заполнены нулевыми значениями. Как я могу это сделать на c и opencv? Спасибо всем.
Я искал функцию setTo и mask
, возможно, является подходящим решением, но мне сложно определить двоичную маску.
cv_img.setTo(Scalar(0,0,0), mask);
Комментарии:
1. Сначала установите roi изображения, которое вы хотите заполнить нулем, cv::Mat RoiImg = cv_img(cv::Range(cv_img.height/2, cv_img.height), cv::Range(0, cv_img.width)); затем установите RoiImg равным нулю с помощью параметрафункция(RoiImg.setTo(Скалярная(0,0,0))).
Ответ №1:
Вы можете добиться этого, установив в пикселях желаемое значение. Просто определите интервалы рентабельности инвестиций (область интереса.
Вот простой код для руководства:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("/ur/img/dir/img.jpg");
for(int i=img.rows/2; i<img.rows;i )
{
for(int j=0; j<img.cols; j )
{
img.at<Vec3b>(Point(j,i))[0] = 0;
img.at<Vec3b>(Point(j,i))[1] = 0;
img.at<Vec3b>(Point(j,i))[2] = 0;
}
}
imshow("Result",img);
waitKey(0);
return 0;
}
Комментарии:
1. Любой способ без цикла?
2. Я не видел функции, выполняющей эту задачу, также может помочь обрезка области и установка для этой области нулей.
Ответ №2:
Вы можете попробовать это:
int w = cv_img.cols;
int h = cv_img.rows;
cv::Rect rectZero(0, h/2, w, h/2);
cv_img(rectZero) = cv::Scalar(0,0,0);