Как изменить пиксельные данные cv :: Mat в openCV?

0

Я в основном пробовал некоторые способы изменения пиксельных данных из уже существующих здесь вопросов. Однако ничего не работает.

Я работаю над iOS OpenCV2.framework.

Я реализовал следующий метод, но не изменяя outputImage.

UIImage *inputUIImage = [UIImage imageName:@"someImage.png"];
UIImage *outputUIImage = nil;

cv::Mat inputImage = <Getting this from a method that converts UIImage to cv::Mat: Working properly>
cv::Mat outputImage; 

inputImage.copyTo(outputImage);

//processing...
for(int i=0; i < outputImage.rows; i++)
{
    for (int j=0; j<outputImage.cols; j++)
    {
        Vec4b bgrColor = outputImage.at<Vec4b>(i,j);

        //converting the 1st channel <assuming the sequence to be BGRA>
        // to a very small value of blue i.e. 1 (out of 255)
        bgrColor.val[0] = (uchar)1.0f;
    }
}

outputUIImage = <Converting cv::Mat to UIImage via a local method : Working properly> 

self.imageView1.image = inputUIImage;
self.imageView2.image = outputUIImage;
//here both images are same in colour. no changes.

Может ли кто-нибудь сообщить мне, что мне не хватает?

Теги:
opencv

1 ответ

0
Лучший ответ

Проблема в том, что вы копируете ссылку, что outputImage.at<Vec4b>(i,j) возвращает в локальную переменную bgrColor и модифицирует ее. Таким образом, ничего в outputImage не изменяется. То, что вы хотите сделать, - это напрямую изменить ссылку, возвращаемую Mat::at.

Решения:

Vec4b& bgrColor = outputImage.at<Vec4b>(i,j);
bgrColor.val[0] = (uchar)1.0f;

или

outputImage.at<Vec4b>(i,j)[0] = (uchar)1.0f;
  • 0
    но здесь, в ваших решениях, даже вы написали тот же код, что и я для первого ... и он не работает .. однако я попробую второй.
  • 0
    извиняюсь. опечатка. Исправлено сейчас
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню