mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 00:03:03 +04:00
Merge pull request #17165 from komakai:objc-binding
Objc binding * Initial work on Objective-C wrapper * Objective-C generator script; update manually generated wrappers * Add Mat tests * Core Tests * Imgproc wrapper generation and tests * Fixes for Imgcodecs wrapper * Miscellaneous fixes. Swift build support * Objective-C wrapper build/install * Add Swift wrappers for videoio/objdetect/feature2d * Framework build;iOS support * Fix toArray functions;Use enum types whenever possible * Use enum types where possible;prepare test build * Update test * Add test runner scripts for iOS and macOS * Add test scripts and samples * Build fixes * Fix build (cmake 3.17.x compatibility) * Fix warnings * Fix enum name conflicting handling * Add support for document generation with Jazzy * Swift/Native fast accessor functions * Add Objective-C wrapper for calib3d, dnn, ml, photo and video modules * Remove IntOut/FloatOut/DoubleOut classes * Fix iOS default test platform value * Fix samples * Revert default framework name to opencv2 * Add converter util functions * Fix failing test * Fix whitespace * Add handling for deprecated methods;fix warnings;define __OPENCV_BUILD * Suppress cmake warnings * Reduce severity of "jazzy not found" log message * Fix incorrect #include of compatibility header in ios.h * Use explicit returns in subscript/get implementation * Reduce minimum required cmake version to 3.15 for Objective-C/Swift binding
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
set(the_description "Image I/O")
|
||||
ocv_add_module(imgcodecs opencv_imgproc WRAP java python)
|
||||
ocv_add_module(imgcodecs opencv_imgproc WRAP java objc python)
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# CMake file for imgcodecs. See root CMakeLists.txt
|
||||
@@ -115,10 +115,10 @@ file(GLOB imgcodecs_ext_hdrs
|
||||
|
||||
if(IOS)
|
||||
list(APPEND imgcodecs_srcs ${CMAKE_CURRENT_LIST_DIR}/src/ios_conversions.mm)
|
||||
list(APPEND IMGCODECS_LIBRARIES "-framework Accelerate" "-framework CoreGraphics" "-framework QuartzCore")
|
||||
list(APPEND IMGCODECS_LIBRARIES "-framework UIKit" "-framework AssetsLibrary")
|
||||
endif()
|
||||
if(APPLE_FRAMEWORK)
|
||||
list(APPEND IMGCODECS_LIBRARIES "-framework UIKit")
|
||||
list(APPEND IMGCODECS_LIBRARIES "-framework Accelerate" "-framework CoreGraphics" "-framework QuartzCore")
|
||||
endif()
|
||||
|
||||
if(TRUE)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
#import <Accelerate/Accelerate.h>
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
#import <ImageIO/ImageIO.h>
|
||||
#include "opencv2/core/core.hpp"
|
||||
#include "opencv2/core.hpp"
|
||||
|
||||
//! @addtogroup imgcodecs_ios
|
||||
//! @{
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
//
|
||||
// Mat+UIImage.h
|
||||
//
|
||||
// Created by Giles Payne on 2020/03/03.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
#import "opencv.hpp"
|
||||
#endif
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "Mat.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface Mat (Converters)
|
||||
|
||||
-(UIImage*)toUIImage;
|
||||
-(instancetype)initWithUIImage:(UIImage*)image;
|
||||
-(instancetype)initWithUIImage:(UIImage*)image alphaExist:(BOOL)alphaExist;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// Mat+UIImage.mm
|
||||
//
|
||||
// Created by Giles Payne on 2020/03/03.
|
||||
//
|
||||
|
||||
#import "Mat+Converters.h"
|
||||
#import <opencv2/imgcodecs/ios.h>
|
||||
|
||||
@implementation Mat (Converters)
|
||||
|
||||
-(UIImage*)toUIImage {
|
||||
return MatToUIImage(self.nativeRef);
|
||||
}
|
||||
|
||||
-(instancetype)initWithUIImage:(UIImage*)image {
|
||||
return [self initWithUIImage:image alphaExist:NO];
|
||||
}
|
||||
|
||||
-(instancetype)initWithUIImage:(UIImage*)image alphaExist:(BOOL)alphaExist {
|
||||
self = [self init];
|
||||
if (self) {
|
||||
UIImageToMat(image, self.nativeRef, (bool)alphaExist);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,50 @@
|
||||
//
|
||||
// Imgcodecs.swift
|
||||
//
|
||||
// Created by Giles Payne on 2020/02/10.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
import OpenCV
|
||||
|
||||
class ImgcodecsTest: OpenCVTestCase {
|
||||
|
||||
let LENA_PATH = Bundle(for: ImgcodecsTest.self).path(forResource:"lena", ofType:"png", inDirectory:"resources")!
|
||||
|
||||
func testImencodeStringMatListOfByte() {
|
||||
let buff = ByteVector()
|
||||
XCTAssert(Imgcodecs.imencode(ext: ".jpg", img: gray127, buf: buff))
|
||||
XCTAssertFalse(0 == buff.length)
|
||||
}
|
||||
|
||||
func testImencodeStringMatListOfByteListOfInteger() {
|
||||
let params40 = IntVector([ImwriteFlags.IMWRITE_JPEG_QUALITY.rawValue, 40])
|
||||
let params90 = IntVector([ImwriteFlags.IMWRITE_JPEG_QUALITY.rawValue, 90])
|
||||
|
||||
let buff40 = ByteVector()
|
||||
let buff90 = ByteVector()
|
||||
|
||||
XCTAssert(Imgcodecs.imencode(ext: ".jpg", img: rgbLena, buf: buff40, params: params40))
|
||||
XCTAssert(Imgcodecs.imencode(ext: ".jpg", img: rgbLena, buf: buff90, params: params90))
|
||||
|
||||
XCTAssert(buff40.length > 0)
|
||||
XCTAssert(buff40.length < buff90.length)
|
||||
}
|
||||
|
||||
func testImreadString() {
|
||||
dst = Imgcodecs.imread(filename: LENA_PATH)
|
||||
XCTAssertFalse(dst.empty())
|
||||
XCTAssertEqual(3, dst.channels())
|
||||
XCTAssert(512 == dst.cols())
|
||||
XCTAssert(512 == dst.rows())
|
||||
}
|
||||
|
||||
func testImreadStringInt() {
|
||||
dst = Imgcodecs.imread(filename: LENA_PATH, flags: 0)
|
||||
XCTAssertFalse(dst.empty());
|
||||
XCTAssertEqual(1, dst.channels());
|
||||
XCTAssert(512 == dst.cols());
|
||||
XCTAssert(512 == dst.rows());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user