如何在openCV中修改cv :: Mat的像素数据?

时间:2013-12-23 11:34:13

标签: c++ ios opencv

我基本上尝试了一些修改像素数据的方法。然而,没有什么是正常的。

我正在使用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.

有谁能让我知道我错过了什么?

1 个答案:

答案 0 :(得分: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;