resize函数返回OSX Mavericks 64bit opencv 2.4.7上的移位图像列

时间:2013-12-11 10:39:00

标签: xcode macos cocoa opencv osx-mavericks

我在OSX Mavericks 64bit上使用OpenCV 2.4.7。

我使用mac ports

安装了OpenCV

'sudo port install opencv'。

我将搜索路径标题和库(分别)指向

的/ opt /本地/包括

的/ opt /本地/ lib中

在Build阶段:我已将以下内容添加到`Link Binary with Libraries'部分:

libopencv_imgproc.2.4.7.dylib

libopencv_core.2.4.7.dylib

在Xcode 5中构建没有问题。

我遇到了OpenCV的resize函数问题。我测试了dst图像与src图像具有相同宽度和高度的场景。所以基本上尺寸没有改变,返回的图像也符合预期......

图片@ http://answers.opencv.org/upfiles/1386739803184039.png

然而,当我将图像的宽度加倍时,像素列会移位(如隔行扫描/重影效果)...

图片@ http://answers.opencv.org/upfiles/13867399843639077.png

我的Objective-C功能如下:

- (NSMutableArray*) resizeWithPixelData: (NSMutableArray*) pixelData withWidth: (int) width withHeight: (int) height withFactor: (float) resizeFactor withDirection: (NSString*) resizeDirection {

cv::Mat image(height,width,CV_8UC1); //height, width ... no colours.
//NSLog(@" %i %i",image.cols,image.rows);
for (int i = 0; i < image.rows; i++) {
    for (int j = 0; j < image.cols; j++) {
        cv::Vec3b &intensity = image.at<cv::Vec3b>(i, j);
        for(int k = 0; k < image.channels(); k++) {
            //uchar col = intensity.val[k];
            uint8_t value = [[pixelData objectAtIndex:i*width + j] intValue];;
            intensity.val[k] = (uchar) value;
        }
    }
}

cv::Mat newimage;
//NSLog(@"height %d width %d",height,resizeFactor*width);
if ([resizeDirection isEqualToString:@"x"]){
    cv::resize(image, newimage, cv::Size((int)resizeFactor*width,(int)height),0,0,CV_INTER_CUBIC);
}

NSLog(@" resize width width %i height %i ",image.cols,image.rows);
NSLog(@" resize width width %i height %i ",newimage.cols,newimage.rows);

NSMutableArray* resizedPixelData = [[NSMutableArray alloc] init];

for (int i = 0; i < newimage.rows; i++) {
    for (int j = 0; j < newimage.cols; j++) {
        cv::Vec3b intensity = newimage.at<cv::Vec3b>(i, j);
        for(int k = 0; k < newimage.channels(); k++) {
            uchar col = intensity.val[k];
            //NSLog(@" %i ",(uint8_t)col);
            [resizedPixelData addObject:[NSNumber numberWithInt:(uint8_t)col]];
        }
    }
}
return resizedPixelData;
}

非常感谢,如果有人能指出解决这个问题的方法。

它是opencv的当前版本吗?

对调整大小功能的调用是否不正确?

与Xcode / OSX / Mavericks不兼容?

上述函数位于.mm文件中(即objective-C plus plus)。

干杯

学家

0 个答案:

没有答案