More data types support in Obj-C and Swift bindings.

This commit is contained in:
Alexander Smorkalov 2024-12-04 12:55:56 +03:00
parent 3b1ec72cf5
commit 644cf0de08
4 changed files with 76 additions and 1 deletions

View File

@ -43,14 +43,19 @@
switch (depth) {
case CV_8U:
case CV_8S:
case CV_Bool:
return 8;
case CV_16U:
case CV_16S:
case CV_16F:
case CV_16BF:
return 16;
case CV_32S:
case CV_32U:
case CV_32F:
return 32;
case CV_64U:
case CV_64S:
case CV_64F:
return 64;
default:
@ -71,12 +76,16 @@
switch (depth) {
case CV_8U:
case CV_16U:
case CV_32U:
case CV_64U:
return 'U';
case CV_8S:
case CV_16S:
case CV_32S:
case CV_64S:
return 'S';
case CV_16F:
case CV_16BF:
case CV_32F:
case CV_64F:
return 'F';

View File

@ -6,15 +6,22 @@
import Foundation
//NOTE: Type constants and related functions are ported from modules/core/include/opencv2/core/hal/interface.h
public extension CvType {
static let CV_8U: Int32 = 0
static let CV_8S: Int32 = 1
static let CV_16U: Int32 = 2
static let CV_16S: Int32 = 3
static let CV_32S: Int32 = 4
static let CV_32U: Int32 = 12
static let CV_64U: Int32 = 10
static let CV_64S: Int32 = 11
static let CV_32F: Int32 = 5
static let CV_64F: Int32 = 6
static let CV_16F: Int32 = 7
static let CV_16BF: Int32 = 8
static let CV_Bool: Int32 = 9
static let CV_8UC1: Int32 = CV_8UC(1)
static let CV_8UC2: Int32 = CV_8UC(2)
@ -38,6 +45,20 @@ public extension CvType {
static let CV_32SC2: Int32 = CV_32SC(2)
static let CV_32SC3: Int32 = CV_32SC(3)
static let CV_32SC4: Int32 = CV_32SC(4)
static let CV_32UC1: Int32 = CV_32UC(1)
static let CV_32UC2: Int32 = CV_32UC(2)
static let CV_32UC3: Int32 = CV_32UC(3)
static let CV_32UC4: Int32 = CV_32UC(4)
static let CV_64SC1: Int32 = CV_64SC(1)
static let CV_64SC2: Int32 = CV_64SC(2)
static let CV_64SC3: Int32 = CV_64SC(3)
static let CV_64SC4: Int32 = CV_64SC(4)
static let CV_64UC1: Int32 = CV_64UC(1)
static let CV_64UC2: Int32 = CV_64UC(2)
static let CV_64UC3: Int32 = CV_64UC(3)
static let CV_64UC4: Int32 = CV_64UC(4)
static let CV_32FC1: Int32 = CV_32FC(1)
static let CV_32FC2: Int32 = CV_32FC(2)
static let CV_32FC3: Int32 = CV_32FC(3)
@ -47,12 +68,23 @@ public extension CvType {
static let CV_64FC2: Int32 = CV_64FC(2)
static let CV_64FC3: Int32 = CV_64FC(3)
static let CV_64FC4: Int32 = CV_64FC(4)
static let CV_16FC1: Int32 = CV_16FC(1)
static let CV_16FC2: Int32 = CV_16FC(2)
static let CV_16FC3: Int32 = CV_16FC(3)
static let CV_16FC4: Int32 = CV_16FC(4)
static let CV_CN_MAX = 512
static let CV_16BFC1: Int32 = CV_16BFC(1)
static let CV_16BFC2: Int32 = CV_16BFC(2)
static let CV_16BFC3: Int32 = CV_16BFC(3)
static let CV_16BFC4: Int32 = CV_16BFC(4)
static let CV_BoolC1: Int32 = CV_BoolC(1)
static let CV_BoolC2: Int32 = CV_BoolC(2)
static let CV_BoolC3: Int32 = CV_BoolC(3)
static let CV_BoolC4: Int32 = CV_BoolC(4)
static let CV_CN_MAX = 128
static let CV_CN_SHIFT = 5
static let CV_DEPTH_MAX = 1 << CV_CN_SHIFT
@ -76,6 +108,18 @@ public extension CvType {
return make(CV_32S, channels: channels)
}
static func CV_32UC(_ channels:Int32) -> Int32 {
return make(CV_32U, channels: channels)
}
static func CV_64SC(_ channels:Int32) -> Int32 {
return make(CV_64S, channels: channels)
}
static func CV_64UC(_ channels:Int32) -> Int32 {
return make(CV_64U, channels: channels)
}
static func CV_32FC(_ channels:Int32) -> Int32 {
return make(CV_32F, channels: channels)
}
@ -87,4 +131,12 @@ public extension CvType {
static func CV_16FC(_ channels:Int32) -> Int32 {
return make(CV_16F, channels: channels)
}
static func CV_16BFC(_ channels:Int32) -> Int32 {
return make(CV_16BF, channels: channels)
}
static func CV_BoolC(_ channels:Int32) -> Int32 {
return make(CV_Bool, channels: channels)
}
}

View File

@ -568,10 +568,22 @@ template<typename T> void putData(uchar* dataDest, int count, T (^readData)(int)
putData(dest, count, ^short (int index) { return cv::saturate_cast<short>(data[offset + index].doubleValue);} );
} else if (depth == CV_32S) {
putData(dest, count, ^int32_t (int index) { return cv::saturate_cast<int32_t>(data[offset + index].doubleValue);} );
} else if (depth == CV_32U) {
putData(dest, count, ^uint32_t (int index) { return cv::saturate_cast<uint32_t>(data[offset + index].doubleValue);} );
} else if (depth == CV_64U) {
putData(dest, count, ^uint64_t (int index) { return cv::saturate_cast<uint64_t>(data[offset + index].doubleValue);} );
} else if (depth == CV_64S) {
putData(dest, count, ^int64_t (int index) { return cv::saturate_cast<int64_t>(data[offset + index].doubleValue);} );
} else if (depth == CV_32F) {
putData(dest, count, ^float (int index) { return cv::saturate_cast<float>(data[offset + index].doubleValue);} );
} else if (depth == CV_64F) {
putData(dest, count, ^double (int index) { return data[offset + index].doubleValue;} );
} else if (depth == CV_Bool) {
putData(dest, count, ^double (int index) { return data[offset + index].boolValue;} );
} else if (depth == CV_16F || depth == CV_16BF) {
@throw [NSException exceptionWithName:@"NotImplementedError"
reason:@"Can not put data to Mat with CV_16F or CV_16BF underlying type."
userInfo:nil];
}
}

View File

@ -7,6 +7,8 @@
#import <XCTest/XCTest.h>
#import <OpenCV/OpenCV.h>
//NOTE: Type constants and related functions are ported from modules/core/include/opencv2/core/hal/interface.h
#define CV_8U 0
#define CV_8S 1
#define CV_16U 2