हाँ, OpenCV iOS पर काम करता है और उपकरणों का उपयोग करने का एक अच्छा पुस्तकालय के साथ प्रदान करेगा। आप या तो अपना खुद का .framework
(थोड़ा थकाऊ) बना सकते हैं या इंटरनेट में से किसी एक को डाउनलोड कर सकते हैं।
उसके बाद, आप iOS पर कंप्यूटर दृष्टि सॉफ्टवेयर का निर्माण करने में सक्षम होना चाहिए, हो सकता है सावधान हालांकि, छवि प्रसंस्करण बहुत सारी शक्ति और स्मृति ले सकता है।
OpenCV, छवियों के लिए अपने स्वयं के सी ++ वर्ग हैं तो आप शायद, आप के लिए पर्याप्त खोजना चाहिए इनपुट और प्रदर्शित करने के लिए UIImage
को आगे और पीछे उन्हें बदलने के लिए
मैं यहाँ कोड मैं NSImage
के लिए उपयोग के इस टुकड़े छोड़ आवश्यकता होगी आप UIImage
//
// NSImage+OpenCV.h
//
#import <AppKit/AppKit.h>
@interface NSImage (NSImage_OpenCV) {
}
+(NSImage*)imageWithCVMat:(const cv::Mat&)cvMat;
-(id)initWithCVMat:(const cv::Mat&)cvMat;
@property(nonatomic, readonly) cv::Mat CVMat;
@property(nonatomic, readonly) cv::Mat CVGrayscaleMat;
@end
और
//
// NSImage+OpenCV.mm
//
#import "NSImage+OpenCV.h"
static void ProviderReleaseDataNOP(void *info, const void *data, size_t size)
{
return;
}
@implementation NSImage (NSImage_OpenCV)
-(CGImageRef)CGImage
{
CGContextRef bitmapCtx = CGBitmapContextCreate(NULL/*data - pass NULL to let CG allocate the memory*/,
[self size].width,
[self size].height,
8 /*bitsPerComponent*/,
0 /*bytesPerRow - CG will calculate it for you if it's allocating the data. This might get padded out a bit for better alignment*/,
[[NSColorSpace genericRGBColorSpace] CGColorSpace],
kCGBitmapByteOrder32Host|kCGImageAlphaPremultipliedFirst);
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:bitmapCtx flipped:NO]];
[self drawInRect:NSMakeRect(0,0, [self size].width, [self size].height) fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
[NSGraphicsContext restoreGraphicsState];
CGImageRef cgImage = CGBitmapContextCreateImage(bitmapCtx);
CGContextRelease(bitmapCtx);
return cgImage;
}
-(cv::Mat)CVMat
{
CGImageRef imageRef = [self CGImage];
CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef);
CGFloat cols = self.size.width;
CGFloat rows = self.size.height;
cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to backing data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), imageRef);
CGContextRelease(contextRef);
CGImageRelease(imageRef);
return cvMat;
}
-(cv::Mat)CVGrayscaleMat
{
CGImageRef imageRef = [self CGImage];
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGFloat cols = self.size.width;
CGFloat rows = self.size.height;
cv::Mat cvMat = cv::Mat(rows, cols, CV_8UC1); // 8 bits per component, 1 channel
CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to backing data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNone |
kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), imageRef);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
CGImageRelease(imageRef);
return cvMat;
}
+ (NSImage *)imageWithCVMat:(const cv::Mat&)cvMat
{
return [[[NSImage alloc] initWithCVMat:cvMat] autorelease];
}
- (id)initWithCVMat:(const cv::Mat&)cvMat
{
NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize() * cvMat.total()];
CGColorSpaceRef colorSpace;
if (cvMat.elemSize() == 1)
{
colorSpace = CGColorSpaceCreateDeviceGray();
}
else
{
colorSpace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
CGImageRef imageRef = CGImageCreate(cvMat.cols, // Width
cvMat.rows, // Height
8, // Bits per component
8 * cvMat.elemSize(), // Bits per pixel
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNone | kCGBitmapByteOrderDefault, // Bitmap info flags
provider, // CGDataProviderRef
NULL, // Decode
false, // Should interpolate
kCGRenderingIntentDefault); // Intent
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage:imageRef];
NSImage *image = [[NSImage alloc] init];
[image addRepresentation:bitmapRep];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return image;
}
@end
के लिए एक सा कोड बदलने के लिए (+०१२३४०००४१)
आपका अंतिम लक्ष्य क्या है? आप छवियों पर क्या पहचानना चाहते हैं? – holex
हाय होलेक्स, मैं इस तरह की छवि का पता लगाना चाहता हूं जैसे कि मैंने नाइके छवि पर कब्जा कर लिया है, तो छवि पहचान का परिणाम नाइकी होना चाहिए जो परिणाम के साथ Google खोज पर जा सकता है। Google ios ऐप में गोगल्स कार्यक्षमता की तरह ही। धन्यवाद – ratnasomu
छवि पहचान करना एक बहुत ही जटिल कार्य है, लेकिन लिंक किए गए प्रश्न में प्रदान किया गया सुझाव शुरू करने के लिए एक अच्छी जगह है। छवि पहचान के लिए ओपनसीवी का उपयोग करने के अन्य संसाधनों के लिए, प्रश्न के जवाब कार्लफिलिप का जवाब देखें [आकार पहचानने पर आईफोन ओपनसीवी के लिए ट्यूटोरियल] (http://stackoverflow.com/questions/5738792/tutorial-for-iphone-opencv-on-shape- मान्यता देना) –