У меня есть функция, которая принимает изображение, преобразует его в HSV и устанавливает V в 100. Однако, похоже, также изменяется исходное изображение.OpenCV cvtColor тоже изменяет исходное изображение
Mat hsvfilter(const Mat& img) {
Mat result;
cvtColor(img, result, CV_BGR2HSV);
for (int j = 0; j < img.rows; j++)
for (int i = 0; i < img.cols; i++)
result.at<Vec3d>(i, j)[2] = 100;
return result;
}
Вот как я это называю:
Mat original = imread("pic.png");
Mat converted = hsvfilter(original);
namedWindow("original", CV_WINDOW_AUTOSIZE);
imshow("original", original);
namedWindow("converted", CV_WINDOW_AUTOSIZE);
imshow("converted", converted);
waitKey(0);
И исходное изображение и преобразованные изображения в конечном итоге, странные черные вертикальные полосы. Я считаю, что у моего кода есть некоторые проблемы с указателями или памятью, но я не могу понять, где. Любая помощь будет оценена по достоинству.
EDIT: ВОТ Фиксированный КОД
Mat hsvfilter(const Mat& img) {
Mat result;
cvtColor(img, result, CV_BGR2HSV);
for (int j = 0; j < result.rows; j++) {
for (int i = 0; i < result.cols; i++) {
result.at<cv::Vec3b>(j, i)[2] = 100;
}
}
return result;
}
Для проверки работоспособности попробуйте проверить, сохраняется ли проблема, если вы выполняете 'Mat convert = hsvfilter (original.clone());'. При клонировании функция доступа к памяти «оригинала» не существует. – ChronoTrigger