5
Trong ứng dụng của tôi, tôi cần phải so sánh RGB của hai hình ảnh rất giống nhau hay không. Tôi đang sử dụng mã này ...Hãy so sánh RGB của hai hình ảnh trong IOS
-(CGFloat)compareImage:(UIImage *)imgPre capturedImage:(UIImage *)imgCaptured
{
int colorDiff;
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(imgPre.CGImage));
int myWidth = (int)CGImageGetWidth(imgPre.CGImage)/2;
int myHeight =(int)CGImageGetHeight(imgPre.CGImage)/2;
const UInt8 *pixels = CFDataGetBytePtr(pixelData);
int bytesPerPixel_ = 4;
int pixelStartIndex = (myWidth + myHeight) * bytesPerPixel_;
UInt8 alphaVal = pixels[pixelStartIndex];
UInt8 redVal = pixels[pixelStartIndex + 1];
UInt8 greenVal = pixels[pixelStartIndex + 2];
UInt8 blueVal = pixels[pixelStartIndex + 3];
UIColor *color = [UIColor colorWithRed:(redVal/255.0f) green:(greenVal/255.0f) blue:(blueVal/255.0f) alpha:(alphaVal/255.0f)];
NSLog(@"color of image=%@",color);
NSLog(@"color of R=%hhu/G=%hhu/B=%hhu",redVal,greenVal,blueVal);
CFDataRef pixelDataCaptured = CGDataProviderCopyData(CGImageGetDataProvider(imgCaptured.CGImage));
int myWidthCaptured = (int)CGImageGetWidth(imgCaptured.CGImage)/2;
int myHeightCaptured =(int)CGImageGetHeight(imgCaptured.CGImage)/2;
const UInt8 *pixelsCaptured = CFDataGetBytePtr(pixelDataCaptured);
int pixelStartIndexCaptured = (myWidthCaptured + myHeightCaptured) * bytesPerPixel_;
UInt8 alphaValCaptured = pixelsCaptured[pixelStartIndexCaptured];
UInt8 redValCaptured = pixelsCaptured[pixelStartIndexCaptured + 1];
UInt8 greenValCaptured = pixelsCaptured[pixelStartIndexCaptured + 2];
UInt8 blueValCaptured = pixelsCaptured[pixelStartIndexCaptured + 3];
UIColor *colorCaptured = [UIColor colorWithRed:(redValCaptured/255.0f) green:(greenValCaptured/255.0f) blue:(blueValCaptured/255.0f) alpha:(alphaValCaptured/255.0f)];
NSLog(@"color of captured image=%@",colorCaptured);
NSLog(@"color of captured image R=%hhu/G=%hhu/B=%hhu",redValCaptured,greenValCaptured,blueValCaptured);
colorDiff=sqrt((redVal-249)*(redVal-249)+(greenVal-greenValCaptured)*(greenVal-greenValCaptured)+(blueVal-blueValCaptured)*(blueVal-blueValCaptured));
return colorDiff;
}
nhưng phương thức này trả về cùng giá trị RGB khi tôi đặt hình ảnh theo tên.
Bạn không sử dụng 'imgCaptured' trong phương pháp của mình. Lạ nhỉ. – Larme
có thể ông đang kêu gọi phương pháp này sau khi chụp các hình ảnh từ các phương pháp đại biểu @ Larme –
@Larme:. Xin lỗi do nhầm lẫn tôi đăng sai mã nhẹ ... xin vui lòng kiểm tra mã uodated ... hình ảnh ở đây hình ảnh được lưu trữ và imgCaptured imgPre hiện đang bắt hình ảnh bằng máy ảnh. Tôi nhận được giá trị RGB của hình ảnh được lưu trữ giống nhau cho hình ảnh khác nhau –