如何将黑色更改为白色

时间:2012-10-15 05:14:10

标签: iphone objective-c ios opencv

enter image description here 使用以下代码,上面显示的图像转换为下图...他们显示黑色背景与灰色线.....我想要灰色线条的白色背景.. 请指导我..我是iPhone新手 非常感谢提前

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Initialise video capture - only supported on iOS device NOT simulator
#if TARGET_IPHONE_SIMULATOR
    NSLog(@"Video capture is not supported in the simulator");
#else
    _videoCapture = new cv::VideoCapture;
    if (!_videoCapture->open(CV_CAP_AVFOUNDATION))
    {
        NSLog(@"Failed to open video camera");
    }
#endif

    // Load a test image and demonstrate conversion between UIImage and cv::Mat
    UIImage *testImage = [UIImage imageNamed:@"testimage.jpg"];

    double t;
    int times = 10;

    //--------------------------------
    // Convert from UIImage to cv::Mat
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    t = (double)cv::getTickCount();

    for (int i = 0; i < times; i++)
    {
        cv::Mat tempMat = [testImage CVMat];
    }

    t = 1000 * ((double)cv::getTickCount() - t) / cv::getTickFrequency() / times;

    [pool release];

    NSLog(@"UIImage to cv::Mat: %gms", t);

    //------------------------------------------
    // Convert from UIImage to grayscale cv::Mat
    pool = [[NSAutoreleasePool alloc] init];

    t = (double)cv::getTickCount();

    for (int i = 0; i < times; i++)
    {
        cv::Mat tempMat = [testImage CVGrayscaleMat];
    }

    t = 1000 * ((double)cv::getTickCount() - t) / cv::getTickFrequency() / times;

    [pool release];

    NSLog(@"UIImage to grayscale cv::Mat: %gms", t);

    //--------------------------------
    // Convert from cv::Mat to UIImage
    cv::Mat testMat = [testImage CVMat];

    t = (double)cv::getTickCount();

    for (int i = 0; i < times; i++)
    {
        UIImage *tempImage = [[UIImage alloc] initWithCVMat:testMat];
        [tempImage release];
    }

    t = 1000 * ((double)cv::getTickCount() - t) / cv::getTickFrequency() / times;

    NSLog(@"cv::Mat to UIImage: %gms", t);

    // Process test image and force update of UI 
    _lastFrame = testMat;
    [self sliderChanged:nil];
}
- (IBAction)capture:(id)sender
{
    if (_videoCapture && _videoCapture->grab())
    {
        (*_videoCapture) >> _lastFrame;
        [self processFrame];
    }
    else
    {
        NSLog(@"Failed to grab frame");        
    }
}
- (void)processFrame
{
    double t = (double)cv::getTickCount();

    cv::Mat grayFrame, output;

    // Convert captured frame to grayscale
    cv::cvtColor(_lastFrame, grayFrame, cv::COLOR_RGB2GRAY);

    // Perform Canny edge detection using slide values for thresholds
    cv::Canny(grayFrame, output,
              _lowSlider.value * kCannyAperture * kCannyAperture,
              _highSlider.value * kCannyAperture * kCannyAperture,
              kCannyAperture);

    t = 1000 * ((double)cv::getTickCount() - t) / cv::getTickFrequency();

    // Display result 
    self.imageView.image = [UIImage imageWithCVMat:output];
    self.elapsedTimeLabel.text = [NSString stringWithFormat:@"%.1fms", t];
}

enter image description here

1 个答案:

答案 0 :(得分:2)

反转灰度1通道Mat是:

Mat invertedOutput = 255 - output;