Я хочу создать прямоугольник с конкретными координатами ширины и высоты от изображения.open cv, прямоугольная область интереса ссылка
А затем разделить каналы и, наконец, на порог данного канала в этой области.
Моя проблема в том, что я хочу ссылаться на область (прямоугольник) на изображении.
это мой код: cv :: Rect myROI (10, 20, 50, 50);
cv :: Mat croppedImage = org_image (myROI);
после того, как я оперирую этот обрезанный объект. Я также хочу, чтобы операция воздействовала на org_image.
Я хочу обратиться в этот район и не скопировать область (ссылку).
Как я могу это сделать?
редактировать 1:
спасибо за ваш ответ в первую очередь. Мне нужно небольшое решение в дополнение к моему коду выше, когда я использую
cv :: threshold (croppedImage, croppedImage, thresh, 255, type);
прямоугольная область является пороговым (но все каналы), но не конкретным каналом, который я хотел, например, я хочу, чтобы был установлен только синий канал, я все пробовал, он не работает.
Я попытался разделить прямоугольник, но он не работает.
Кстати, это решение для слияния разделенного изображения тоже? Это могло бы помочь мне Если бы я мог разделить, ссылаясь только на croppedImage, это решит мою проблему, я думаю.
Так что мне нужно только порог одного канала в роу, пожалуйста, дайте мне полное решение. И я должен использовать расщепление.
Спасибо
Edit 2
Так что не работает, см моего кода здесь ... Операции по расщепленным каналам оленьей кожи имеет никакого влияние на обрезанное изображение и, соответственно, оригинальное изображение тоже.
Mat org_image = image.clone();
cv::Rect myROI(0, 0, 5, 5);
cv::Mat croppedImage = org_image(myROI);
std::vector<cv::Mat> img_split(3);
split(croppedImage, img_split);
cv::threshold(img_split[1], img_split[1], thresh, 255, 0);
for(int i=0; i < 3; i++)
printf("img_split[%d].data[0] ==> adress: %p, ==> data: %d\n", i, &img_split[i].data[0], img_split[i].data[0]);
printf("+++++++++++++++++\n");
for(int i=0; i < 3; i++)
printf(" croppedImage[%d] ==> adress: %p, ==> data: %d\n", i, &croppedImage.data[i], croppedImage.data[i]);
printf("+++++++++++++++++\n");
for(int i=0; i < 3; i++)
printf("org_image[%d] ==> adress: %p, data -> %d\n", i, &org_image.data[i], org_image.data[i]);
Выход:
img_split[0].data[0] ==> adress: 0x846e8a0, ==> data: 212
img_split[1].data[0] ==> adress: 0x846e8d0, ==> data: 255
img_split[2].data[0] ==> adress: 0x846e910, ==> data: 220
+++++++++++++++++
croppedImage[0] ==> adress: 0xb468d010, ==> data: 212
croppedImage[1] ==> adress: 0xb468d011, ==> data: 220
croppedImage[2] ==> adress: 0xb468d012, ==> data: 220
+++++++++++++++++
org_image[0] ==> adress: 0xb468d010, data -> 212
org_image[1] ==> adress: 0xb468d011, data -> 220
org_image[2] ==> adress: 0xb468d012, data -> 220
У меня нет больше никаких идей .... :-(
Если только вы явно 'клон()' 'резюме :: Mat', память разделяется. Выполнение операций с ROI должно влиять на исходное изображение. Вы говорите, что ваш код этого не делает? – Aurelius