使用以下代码,上面显示的图像转换为下图...他们显示黑色背景与灰色线.....我想要灰色线条的白色背景.. 请指导我..我是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];
}
答案 0 :(得分:2)
反转灰度1通道Mat是:
Mat invertedOutput = 255 - output;