Comments (3)
Hi @franva
I've just implemented conversion functions (Matft.image.cgimage2mfarray
and Matft.image.mfarray2cgimage
)
So, you can process image as mfarray!
Examples are below;
@IBOutlet weak var originalImageView: UIImageView!
@IBOutlet weak var reverseImageView: UIImageView!
@IBOutlet weak var swapImageView: UIImageView!
func reverse(){
var image = Matft.image.cgimage2mfarray(self.reverseImageView.image!.cgImage!)
// reverse
image = image[Matft.reverse] // same as image[~<<-1]
self.reverseImageView.image = UIImage(cgImage: Matft.image.mfarray2cgimage(image))
}
func swapchannel(){
var image = Matft.image.cgimage2mfarray(self.swapImageView.image!.cgImage!)
// swap channel
image = image[Matft.all, Matft.all, MfArray([1,0,2,3])] // same as image[0~<, 0~<, MfArray([1,0,2,3])]
self.swapImageView.image = UIImage(cgImage: Matft.image.mfarray2cgimage(image))
}
Please refer to the example here.
from matft.
@franva
Thank you for your feedback and sorry for late reply!
I didn't suppose image processing in Matft but what Matft can connect to UIImage may be helpful. (Also complex supporting(#24)).
I found opencv's conversion codes, and referred to it. Finally, I could convert UIImage into MfArray (opposite conversion too).
The code is below;
@IBOutlet weak var originalImageView: UIImageView!
@IBOutlet weak var processedImageView: UIImageView!
func reverse(){
let size = CFDataGetLength(self.processedImageView.image!.cgImage!.dataProvider!.data)
let width = Int(self.processedImageView.image!.size.width)
let height = Int(self.processedImageView.image!.size.height)
var arr = Matft.nums(Float.zero, shape: [height, width, 4])
var dst = Array<UInt8>(repeating: UInt8.zero, count: arr.size)
// UIImage to MfArray
arr.withDataUnsafeMBPtrT(datatype: Float.self){
let srcptr = CFDataGetBytePtr(self.processedImageView.image?.cgImage?.dataProvider?.data)!
// unit8 to float
vDSP_vfltu8(srcptr, vDSP_Stride(1), $0.baseAddress!, vDSP_Stride(1), vDSP_Length(size))
}
// reverse
arr = arr[~<<-1]
arr = arr.conv_order(mforder: .Row)
// MfArray to UIImage
arr.withDataUnsafeMBPtrT(datatype: Float.self){
srcptr in
dst.withUnsafeMutableBufferPointer{
// float to unit8
vDSP_vfixu8(srcptr.baseAddress!, vDSP_Stride(1), $0.baseAddress!, vDSP_Stride(1), vDSP_Length(arr.size))
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.last.rawValue | CGImageByteOrderInfo.orderDefault.rawValue)
let provider = CGDataProvider(data: CFDataCreate(kCFAllocatorDefault, $0.baseAddress!, arr.size))
let cgimage = CGImage(width: arr.shape[1], height: arr.shape[0], bitsPerComponent: 8*1, bitsPerPixel: 8*arr.shape[2], bytesPerRow: arr.shape[1]*arr.shape[2], space: colorSpace, bitmapInfo: bitmapInfo, provider: provider!, decode: nil, shouldInterpolate: false, intent: CGColorRenderingIntent.defaultIntent)
self.processedImageView.image = UIImage(cgImage: cgimage!)
}
}
}
The output is like this;
Whole code is here.
Matft doesn't support full fancy indexing, so perfect image processing may not be done. but I hope this helps you.
from matft.
The above code has some problems.
- Multiple conversions (UInt8 -> Float(MfArray), to Row major order, Float(MfArray) -> UInt8)
- The code is not understandable...
- example:
arr.withDataUnsafeMBPtrT(datatype: Float.self)
- example:
The second point may be solved by the next protocol version(Readme was not updated).
from matft.
Related Issues (20)
- Boolean Indexing is slow HOT 10
- Other Cubic spline Interpolation
- not found np.unique() HOT 1
- Wrong Shape after "ufuncReduce add" HOT 5
- Matft.math.pow is not working as expected HOT 1
- Add @inline
- Complex support HOT 9
- Refactoring pointer HOT 3
- Support for atan2 HOT 3
- Feature Request: Numpy Dot HOT 1
- Image processing HOT 5
- Multidimensional MfArray with different length Arrays in axis 1 HOT 2
- Copy On Write implementation HOT 2
- Subscript bug using `Matft.arange()` HOT 4
- Numpy FFT implementation? HOT 11
- Support MLMultiArray HOT 1
- [Bug] Invalid access on some complex operation
- How to contribute - have some small numpy / scipy vDSP implementations HOT 1
- How to get the content of the MfArray? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from matft.