У меня есть это приложение, которое берет изображение (в OpenCVWrapper) в оттенках серого и преобразует яркость указанного раздела c, который касается Apple Pencil, в звук. Темные области не издают никаких звуков, средние области создают среднюю высоту звука, а яркие области - высокую высоту звука.
Но по некоторым причинам код работает в некоторых областях изображения безупречно, а в других он почти полностью изменен.
Эта часть называется OpenCVWrapper.h, это файл в моем Xcodeproject
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface OpenCVWrapper : NSObject
+ (UInt16) getGrayVal:(int)i :(int)j;
@end
NS_ASSUME_NONNULL_END
Затем этот файл сохраняется как OpenCVWrapper.mm
#import "OpenCVWrapper.h"
#import <opencv2/opencv.hpp>
@implementation OpenCVWrapper
+ (UInt16) getGrayVal:(int)i :(int)j{
cv::Mat grayMat;
NSString *path = [[NSBundle mainBundle] pathForResource:@"gausshighres" ofType:@"png"];
const char * cpath = [path cStringUsingEncoding:NSUTF8StringEncoding];
grayMat = cv::imread(cpath,cv::IMREAD_ANYDEPTH);
return grayMat.at<UInt16>(i, j);
}
@end
, что на мой взгляд контроллер в этой строке
let grayVal = Double(OpenCVWrapper.getGrayVal(Int32(round(y)),Int32(round(x))))
x и y - местоположение пера
let x = pencilStrokeRecognizer.touchLocation.x
let y = pencilStrokeRecognizer.touchLocation.y
Проблема в том, что значение, которое я получаю для grayVal, в некоторых местах неверно. Он называет темные области с большим серым, а яркие области являются случайными. Это неправильно примерно в 50% случаев, и я не знаю почему.
Здесь указан полный код, но я выяснил, что проблема заключается в этом разделе, может быть
Звук в приложении Swift случайно не соответствует интенсивности яркости раздела изображения?
Это изображение, которое он обрабатывает
В целом, оно не возвращает ошибок, но по какой-то причине не работает.
NEW STUFF Так я масштабировал изображение:
//Calculate point at which pencil is touching with respect to the input image
func pencilTouchHandler(touch: UITouch) {
//Get point at which user is touching
let currentPoint = touch.location(in: self.coordinateSpaceView)
//Excute if touch input is within the image
if currentPoint.x >= origin.x && currentPoint.y >= origin.y
&& currentPoint.x < (origin.x + size.width-1)
&& currentPoint.y < (origin.y + size.height-1){
//Track whether or not touch was within the boundaries of the image
touchInImage = true
//Calculate (x,y) coordinates with respect to input image
//Use ratio of original image dimensions
let xVal = (imageSize.width / size.width)*(currentPoint.x - origin.x)
let yVal = (imageSize.height / size.height)*(currentPoint.y - origin.y)
//Record Touch Location
touchLocation = CGPoint(x: xVal, y: yVal)
lastTouch = currentPoint
}
}
, а затем я сделал
let x = pencilStrokeRecognizer.touchLocation.x
let y = pencilStrokeRecognizer.touchLocation.y