2

OpenCV を使用して画像をステッチする作業を行っています。「720×960ピクセル」のサイズの画像を4枚使用しています。4 つの画像から、アプリの起動時にステッチされる 3 つの画像を使用しました。ステッチボタンをタップすると、4番目のステッチがステッチされます。正常に動作しています。しかし、4 つの画像すべてのサイズを「720 × 960 ピクセルから 640 × 960 ピクセル」に変更すると、問題が発生し、画像のサイズを変更した後にコードを実行すると、3 つの画像が上記と同じように表示されます。 、しかし、4番目の画像をステッチする必要がある場所からステッチボタンをタップすると、コンパイラはコンソールに以下のメッセージを表示します-

画像をステッチできません。エラー コード = 1

<エラー>: CGImageCreate: 無効な画像サイズ: 0 x 0.

次のコードを使用しました-

CVViewController.h 内

import <UIKit/UIKit.h>

@interface CVViewController : UIViewController
{
    NSArray *arrayImgGlobal;

}
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView* spinner;
@property (nonatomic, weak) IBOutlet UIScrollView* scrollView;
@end

CVViewController.m 内

#import "CVViewController.h"
#import "CVWrapper.h"

@interface CVViewController ()

@end

@implementation CVViewController

- (void)viewDidAppear:(BOOL)animated    
{
    [super viewDidAppear:animated];
    NSArray* imageArray = [NSArray arrayWithObjects:
                           [UIImage imageNamed:@"1@2x.jpg"],
                           [UIImage imageNamed:@"2@2x.jpg"],
                           [UIImage imageNamed:@"3@2x.jpg"],
                            nil];
    [self stitch:imageArray];
}

-(IBAction)onButtonStitch:(UIButton *)btn
{
    [self onBtnStitchPressed:arrayImgGlobal];
}
-(void)onBtnStitchPressed:(NSArray *)imageArray
{
    [self stitch:imageArray];
}

- (void) stitch : (NSArray *)imageArray
{
    [self.spinner startAnimating];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
              UIImage* stitchedImage = [CVWrapper processWithArray:imageArray];
        dispatch_async(dispatch_get_main_queue(), ^{

            NSLog (@"stitchedImage %@",stitchedImage);
            for (UIImageView *imgView in [self.scrollView subviews]) {
                [imgView removeFromSuperview];
            }
            UIImageView* imageView = [[UIImageView alloc] initWithImage:stitchedImage];

            self.imageView = imageView;
            [self.scrollView addSubview:self.imageView];
            self.scrollView.backgroundColor = [UIColor blackColor];
            self.scrollView.contentSize = self.imageView.bounds.size;
            self.scrollView.maximumZoomScale = 4.0;
            self.scrollView.minimumZoomScale = 0.5;
            self.scrollView.contentOffset = CGPointMake(-(self.scrollView.bounds.size.width-self.imageView.bounds.size.width)/2, -(self.scrollView.bounds.size.height-self.imageView.bounds.size.height)/2);
            NSLog (@"scrollview contentSize %@",NSStringFromCGSize(self.scrollView.contentSize));
            [self.spinner stopAnimating];

            NSArray *arrayImages = [NSArray arrayWithObjects:
                                    stitchedImage,
                                    [UIImage imageNamed:@"4@2x.jpg"],
                                    nil];
            arrayImgGlobal = arrayImages;

        });
    });
}
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return YES;
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - scroll view delegate

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}
@end

私のプロジェクトで使用したコードはこちら

もう1つ-ios 7.0シミュレーターで上記のリンクのコードとともにコードをテストしました。デバイスに実行しているときに、上記のメッセージがコンソールに表示されました。

誰かが私が間違っている可能性がある場所とそれを修正する方法を教えてもらえますか? ありがとう

4

0 に答える 0