2010-04-27 41 views
0

在我的應用我米以下的使用方式來獲得紅色像素圖像如何讓iPhone中的膚色彩色像素?

// 
// PixelsAccessAppDelegate.h 
// PixelsAccess 
// 
// Created by Fortune1 on 14/04/10. 
// Copyright __MyCompanyName__ 2010. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
@class clsPixelAccess; 
NSUInteger numberOfRedPixels; 
NSUInteger numberOfRedPixels1; 
NSUInteger numberOfRedPixels2; 
NSUInteger numberOfRedPixels3; 
NSUInteger numberOfRedPixels4; 
NSUInteger numberOfRedPixels5; 
NSUInteger numberOfRedPixels6; 
NSUInteger numberOfRedPixels7; 
NSUInteger numberOfRedPixels8; 
NSUInteger numberOfRedPixels9; 
NSUInteger numberOfRedPixels10; 
NSUInteger numberOfRedPixels11; 
NSUInteger numberOfRedPixels12; 
NSUInteger numberOfRedPixels13; 
NSUInteger numberOfRedPixels14; 
NSUInteger numberOfRedPixels15; 
NSUInteger numberOfRedPixels16; 
NSUInteger numberOfRedPixels17; 
NSUInteger numberOfRedPixels18; 
NSUInteger numberOfRedPixels19; 
NSUInteger numberOfRedPixels20; 
NSUInteger numberOfRedPixels21; 
NSUInteger numberOfRedPixels22; 
NSUInteger numberOfRedPixels23; 
NSUInteger numberOfRedPixels24; 
NSUInteger numberOfRedPixels25; 
NSUInteger numberOfRedPixels26; 
NSUInteger numberOfRedPixels27; 
NSUInteger numberOfRedPixels28; 
NSUInteger numberOfRedPixels29; 
NSUInteger numberOfRedPixels30; 
NSUInteger numberOfRedPixels31; 

@interface PixelsAccessAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    clsPixelAccess *obj; 

} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
-(IBAction)processImage:(id)sender; 

@end 

//////////////////// 
// 
// PixelsAccessAppDelegate.m 
// PixelsAccess 
// 
// Created by Fortune1 on 14/04/10. 
// Copyright __MyCompanyName__ 2010. All rights reserved. 
// 

#import "PixelsAccessAppDelegate.h" 
#import "clsPixelAccess.h" 

@implementation PixelsAccessAppDelegate 

@synthesize window; 

- (IBAction)processImage:(id)sender 
{ 
    NSUInteger retVal; 
    obj = [[clsPixelAccess alloc] init]; 

    NSInteger imageSend =[obj processImage1:[UIImage imageNamed:@"s.jpg"]]; 
    NSInteger iamgeCall =[obj getPixelData:retVal]; 
    NSUInteger *numberOfRedPixels = retVal; 
    //lblPixelCount.text = [NSString stringWithFormat: @"There are %d red pixels in the image", numberOfRedPixels]; 

} 

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after application launch 
    [window makeKeyAndVisible]; 
} 


- (void)dealloc { 
    [window release]; 
    [super dealloc]; 
} 


@end 
/////////////// 

// 
// clsPixelsAccess.h 
// PixelsAccess 
// 
// Created by Fortune1 on 14/04/10. 
// Copyright 2010 __MyCompanyName__. All rights reserved. 
// 

#import <Foundation/Foundation.h> 


@interface clsPixelAccess : NSObject { 

} 
-(NSInteger) processImage1: (UIImage*) image; 
-(NSInteger)getPixelData:(NSUInteger *)pixelCount; 
@end 
///////// 


// 
// clsPixelsAccess.m 
// PixelsAccess 
// 
// Created by Fortune1 on 14/04/10. 
// Copyright 2010 __MyCompanyName__. All rights reserved. 
// 

#import "clsPixelAccess.h" 
#import "PixelsAccessAppDelegate.h" 

@implementation clsPixelAccess 

struct pixel 
{ 
    //unsigned char r, g, b,a; 
    Byte r, g, b, a; 
    int count; 
}; 


-(NSInteger)getPixelData:(NSUInteger *)pixelCount 
{ 
    *pixelCount =numberOfRedPixels; 
    return 1; 

} 
// Process the image and return the number of pure red pixels in it. 

- (NSInteger) processImage1: (UIImage*) image 
{ 

    // Allocate a buffer big enough to hold all the pixels 

    struct pixel* pixels = (struct pixel*) calloc(1, image.size.width * image.size.height * sizeof(struct pixel)); 
    if (pixels != nil) 
    { 
     // Create a new bitmap 
     CGContextRef context = CGBitmapContextCreate(
                (void*) pixels, 
                image.size.width, 
                image.size.height, 
                8, 
                image.size.width * 4, 
                CGImageGetColorSpace(image.CGImage), 
                kCGImageAlphaPremultipliedLast 
                ); 
     //NSLog(@"1=%d, 2=%d, 3=%d", CGImageGetBitsPerComponent(image), CGImageGetBitsPerPixel(image),CGImageGetBytesPerRow(image)); 
     if (context != NULL) 
     { 
      // Draw the image in the bitmap 
      CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, image.size.width, image.size.height), image.CGImage); 
      NSUInteger numberOfPixels = image.size.width * image.size.height; 
      NSMutableArray *numberOfPixelsArray = [[[NSMutableArray alloc] initWithCapacity:numberOfPixelsArray] autorelease]; 
      NSLog(@"Pixel data %d", numberOfPixelsArray); 

      /* 
      NSMatrix  *newMatrix = [[NSMatrix alloc] 
      initWithFrame:NSMakeRect(138.0f, 85.0f, 0.0f, 0.0f) 
      mode:NSRadioModeMatrix 
      prototype:prototypeButtonCell 
      numberOfRows: 

      numberOfColumns:]; 
      */ 
      while (numberOfPixels > 0) 
      { 
       if (pixels->r > 0 && pixels->r <= 7) 
       { 
        numberOfRedPixels++; 
       } 
       NSLog(@"Red pixel data %d",numberOfRedPixels); 

       if (pixels->r >= 8 && pixels->r <= 15) 
       { 
        numberOfRedPixels1++; 
       } 

       NSLog(@"Red pixel data1 %d",numberOfRedPixels1); 

       if (pixels->r >= 16 && pixels->r <=23) 
       { 
        numberOfRedPixels2++; 
       } 
       NSLog(@"Red pixel data2 %d",numberOfRedPixels2); 

       if (pixels->r >= 24 && pixels->r <=31) 
       { 
        numberOfRedPixels3++; 
       } 
       NSLog(@"Red pixel data3 %d",numberOfRedPixels3); 

       if (pixels->r >= 32 && pixels->r <= 39) 
       { 
        numberOfRedPixels4++; 
       } 
       NSLog(@"Red pixel data4 %d",numberOfRedPixels4); 

       if (pixels->r >= 40 && pixels->r <= 47) 
       { 
        numberOfRedPixels5++; 
       } 
       NSLog(@"Red pixel data5 %d",numberOfRedPixels5); 
       if (pixels->r >= 48 && pixels->r <= 55) 
       { 
        numberOfRedPixels6++; 
       } 
       NSLog(@"Red pixel data6 %d",numberOfRedPixels6); 

       if(pixels->r >= 56 && pixels->r <= 63) 
       { 
        numberOfRedPixels7++; 
       } 
       NSLog(@"Red pixel data7 %d",numberOfRedPixels7); 

       if (pixels->r >= 64 && pixels->r <= 71) 
       { 
        numberOfRedPixels8++; 
       } 
       NSLog(@"Red pixel data8 %d",numberOfRedPixels8); 

       if (pixels->r >= 72 && pixels->r <= 79) 
       { 
        numberOfRedPixels9++; 
       } 
       NSLog(@"Red pixel data9 %d",numberOfRedPixels9); 

       if (pixels->r >= 80 && pixels->r <= 87) 
       { 
        numberOfRedPixels10++; 
       } 
       NSLog(@"Red pixel data10 %d",numberOfRedPixels10); 

       if (pixels->r >= 88 && pixels->r <= 95) 
       { 
        numberOfRedPixels11++; 
       } 
       NSLog(@"Red pixel data11 %d",numberOfRedPixels11); 

       if (pixels->r >= 96 && pixels->r <= 103) 
       { 
        numberOfRedPixels12++; 
       } 
       NSLog(@"Red pixel data12 %d",numberOfRedPixels12); 

       if (pixels->r >= 104 && pixels->r <= 111) 
       { 
        numberOfRedPixels13++; 
       } 
       NSLog(@"Red pixel data13 %d",numberOfRedPixels13); 

       if (pixels->r >= 112 && pixels->r <= 119) 
       { 
        numberOfRedPixels14++; 
       } 
       NSLog(@"Red pixel data14 %d",numberOfRedPixels14); 

       if (pixels->r >= 120 && pixels->r <= 127) 
       { 
        numberOfRedPixels15++; 
       } 
       NSLog(@"Red pixel data15 %d",numberOfRedPixels15); 
       if (pixels->r > 128 && pixels->r <= 135) 
       { 
        numberOfRedPixels16++; 
       } 
       NSLog(@"Red pixel data16 %d",numberOfRedPixels16); 

       if (pixels->r >= 136 && pixels->r <= 143) 
       { 
        numberOfRedPixels17++; 
       } 

       NSLog(@"Red pixel data17 %d",numberOfRedPixels17); 

       if (pixels->r >= 144 && pixels->r <=151) 
       { 
        numberOfRedPixels18++; 
       } 
       NSLog(@"Red pixel data18 %d",numberOfRedPixels18); 

       if (pixels->r >= 152 && pixels->r <=159) 
       { 
        numberOfRedPixels19++; 
       } 
       NSLog(@"Red pixel data19 %d",numberOfRedPixels19); 

       if (pixels->r >= 160 && pixels->r <= 167) 
       { 
        numberOfRedPixels20++; 
       } 
       NSLog(@"Red pixel data20 %d",numberOfRedPixels20); 

       if (pixels->r >= 168 && pixels->r <= 175) 
       { 
        numberOfRedPixels21++; 
       } 
       NSLog(@"Red pixel data21 %d",numberOfRedPixels21); 
       if (pixels->r >= 176 && pixels->r <= 199) 
       { 
        numberOfRedPixels22++; 
       } 
       NSLog(@"Red pixel data22 %d",numberOfRedPixels22); 

       if(pixels->r >= 184 && pixels->r <= 191) 
       { 
        numberOfRedPixels23++; 
       } 
       NSLog(@"Red pixel data23 %d",numberOfRedPixels23); 

       if (pixels->r >= 192 && pixels->r <= 199) 
       { 
        numberOfRedPixels24++; 
       } 
       NSLog(@"Red pixel data24 %d",numberOfRedPixels24); 

       if (pixels->r >= 200 && pixels->r <= 207) 
       { 
        numberOfRedPixels25++; 
       } 
       NSLog(@"Red pixel data25 %d",numberOfRedPixels25); 

       if (pixels->r >= 208 && pixels->r <= 215) 
       { 
        numberOfRedPixels26++; 
       } 
       NSLog(@"Red pixel data26 %d",numberOfRedPixels26); 

       if (pixels->r >= 216 && pixels->r <= 223) 
       { 
        numberOfRedPixels27++; 
       } 
       NSLog(@"Red pixel data27 %d",numberOfRedPixels27); 

       if (pixels->r >= 224 && pixels->r <= 231) 
       { 
        numberOfRedPixels28++; 
       } 
       NSLog(@"Red pixel data28 %d",numberOfRedPixels28); 

       if (pixels->r >= 232 && pixels->r <= 239) 
       { 
        numberOfRedPixels29++; 
       } 
       NSLog(@"Red pixel data29 %d",numberOfRedPixels29); 

       if (pixels->r >= 240 && pixels->r <= 247) 
       { 
        numberOfRedPixels30++; 
       } 
       NSLog(@"Red pixel data30 %d",numberOfRedPixels30); 

       if (pixels->r >= 248) 
       { 
        numberOfRedPixels31++; 
       } 
       NSLog(@"Red pixel data31 %d",numberOfRedPixels31); 
       pixels++; 

       numberOfPixels--; 
      } 

      CGContextRelease(context); 
     } 

     free(pixels); 
    } 

    return 1; 
}   

@end 

我的問題是我想要的膚色像素,它們怎麼可能

請幫助我。

由於提前

+0

請記住,*有很多*的膚色。 – ceejayoz 2010-04-27 17:17:23

+0

你是否確實發現了膚色....? – Spynet 2012-06-20 04:57:39

回答

1

所有這些代碼正在做的是確定具有特定範圍內的紅色成分的像素的數量。如果你只是想尋找膚色像素,去掉所有的比較,但一個改變,從

if (pixels->r >= 192 && pixels->r <= 199) 

if ((pixels->r >= ? && pixels->r <= ?) && (pixels->g >= ? && pixels->g <= ?) && (pixels->b >= ? && pixels->b <= ?)) 

其中問號是實際值範圍爲每個佔位符這三種顏色組件將在應用程序中定義膚色。

0

你現在正在做的是根據紅色分量的值對像素進行分箱,如果你想到的是基本上將顏色空間劃分爲紅色的矩形塊。

要識別膚色,您需要做類似的操作,在您認爲是膚色的顏色空間中定義一個區域,並進行包含的類似測試。這將是一個有點tricker,但因爲我不指望它會很好,而且是矩形的。

這也完全忽略了確定你在談論誰的膚色問題,這是一個完全不同的問題。

+0

特別是如果你正在拍攝肖恩保羅或奧普拉的照片:D – Kheldar 2011-08-23 08:27:52

相關問題