Beberapa waktu yang lalu saya sudah menanyakan pertanyaan ini dan saya juga mendapat jawaban yang bagus:
Saya telah mencari forum ini ke atas dan ke bawah tetapi saya tidak dapat menemukan apa yang benar-benar saya butuhkan. Saya ingin mendapatkan data gambar mentah dari kamera. Sampai sekarang saya mencoba mengeluarkan data dari imageDataSampleBuffer dari metode captureStillImageAsynchronouslyFromConnection:completionHandler: dan menulisnya ke objek NSData, tetapi tidak berhasil. Mungkin saya berada di jalur yang salah atau mungkin saya hanya melakukan kesalahan. Yang tidak saya inginkan adalah gambarnya dikompresi dengan cara apa pun.
Cara mudahnya adalah dengan menggunakan jpegStillImageNSDataRepresentation: dari AVCaptureStillImageOutput, tapi seperti saya katakan, saya tidak ingin dikompresi.
Terima kasih!
Data gambar mentah dari kamera
Saya pikir saya bisa mengerjakan ini, tapi akhirnya saya menyadari bahwa saya perlu mendapatkan data gambar mentah secara lebih langsung dengan cara yang sama seperti yang dilakukan di "645 PRO".
Gambar-gambar di situs tersebut menunjukkan bahwa mereka mendapatkan data mentah sebelum kompresi jpeg dilakukan. Itulah yang ingin saya lakukan. Dugaan saya adalah saya perlu mengubah imageDataSampleBuffer
tetapi saya tidak melihat cara untuk melakukannya sepenuhnya tanpa kompresi. "645 PRO" juga menyimpan gambarnya di TIFF jadi menurut saya ia menggunakan setidaknya satu perpustakaan tambahan.
Saya tidak ingin membuat aplikasi foto tetapi saya memerlukan kualitas terbaik untuk memeriksa fitur tertentu dalam gambar.
Terima kasih!
Sunting 1: Jadi setelah mencoba dan mencari ke berbagai arah untuk sementara waktu sekarang saya memutuskan untuk memberikan pembaruan status.
Tujuan akhir dari proyek ini adalah untuk memeriksa fitur-fitur tertentu dalam gambar yang akan terjadi dengan bantuan opencv. Namun hingga aplikasi dapat melakukannya di ponsel, saya mencoba mengeluarkan sebagian besar gambar yang tidak terkompresi dari ponsel untuk dianalisis di komputer.
Oleh karena itu saya ingin menyimpan "instance NSData yang berisi byte BGRA terkompresi yang dikembalikan dari kamera" yang dapat saya peroleh dengan kode Brad Larson sebagai file bmp atau TIFF. Seperti yang saya katakan di komentar, saya mencoba menggunakan opencv untuk ini (tetap diperlukan). Tapi hal terbaik yang bisa saya lakukan adalah mengubahnya menjadi UIImage dengan fungsi dari Pembicaraan Visi Komputer.
void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);
cv::Mat frame(height, width, CV_8UC4, (void*)baseAddress);
UIImage *testImag = [UIImage imageWithMat:frame andImageOrientation:UIImageOrientationUp];
//imageWithMat... being the function from Computer Vision Talks which I can post if someone wants to see it
ImageMagick - Pendekatan
Hal lain yang saya coba adalah menggunakan ImageMagick seperti yang disarankan di postingan lain . Namun saya tidak dapat menemukan cara untuk melakukannya tanpa menggunakan sesuatu seperti UIImagePNGRepresentation
atau UIImageJPEGRepresentation
.
Untuk saat ini saya mencoba melakukan sesuatu dengan libtiff menggunakan tutorial.
Mungkin seseorang punya ide atau mengetahui cara yang lebih mudah untuk mengubah objek buffer saya menjadi gambar yang tidak terkompresi. Terima kasih sebelumnya lagi!
Sunting 2:
Aku menemukan sesuatu! Dan harus saya akui, saya sangat buta.
void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);
cv::Mat frame(height, width, CV_8UC4, (void*)baseAddress);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"ocv%d.TIFF", picNum]];
const char* cPath = [filePath cStringUsingEncoding:NSMacOSRomanStringEncoding];
const cv::string newPaths = (const cv::string)cPath;
cv::imwrite(newPaths, frame);
Saya hanya perlu menggunakan fungsi imwrite dari opencv. Dengan cara ini saya mendapatkan file TIFF sekitar 30 MB langsung setelah beyer-Polarisasi!