Berkeley_socketsを使用する Linux のサーバーがあり、iPod クライアントとの TCP 接続を作成します。IplImage* img;
サーバーから iPod に を送信する必要があります。コマンドを使用し、write(socket,/*DATA*/,43200);
送信しようとしたデータは次のとおりです: reinterpret_cast<char*>(img)
、img
およびimg->imageData
. これらの選択肢はすべて、実際にはあらゆる種類のデータを送信します。
iPod 側では、この方法でデータを受信します (SO でここで見たように。複雑なことは気にしないでください。単一のイメージからすべてのデータを受信するだけです)。
bytesRead = [iStream read: (char*)[buffer mutableBytes] + totalBytesRead maxLength: 43200 - totalBytesRead];
画像全体を受け取った後、私はこれを持っています:
[buffer setLength: 43200];
NSData *imagem = [NSData dataWithBytes:buffer length:43200];
UIImage *final= [self UIImageFromIplImage:imagem];
今..私はiPodでopenCVを動作させることができることを知っていますが、それを動作させる方法についての簡単な説明を見つけることができないので、このWebページの2番目のコードを使用してそれを適応させました.私の画像の(たとえば、CGImageCreate()
関数からすべての変数を設定します。):
- (UIImage *)UIImageFromIplImage:(NSData *)image {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
// Allocating the buffer for CGImage
NSData *data = [NSData dataWithBytes:image length:43200];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
// Creating CGImage from chunk of IplImage
size_t width = 240;
size_t height = 180;
size_t depth = 8; //bitsPerComponent
size_t depthXnChannels = 8; //bitsPerPixel
size_t widthStep = 240; //bytesPerRow
CGImageRef imageRef = CGImageCreate(width, height, depth, depthXnChannels, widthStep, colorSpace, kCGImageAlphaNone|kCGBitmapByteOrderDefault,provider, NULL, false, kCGRenderingIntentDefault);
// Getting UIImage from CGImage
UIImage *ret = [UIImage imageWithCGImage:imageRef];
lolView.image = ret;
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return ret;
}
問題:画像を表示すると、送信された画像が常に同じであるにもかかわらず、完全に奇妙で「ランダム」になります。私は本当に何が悪いのか分かりません..
PS: TCP 接続は、数字や単語などの他のデータで正常に機能しています。そして画像はグレースケールです。
すべての助けをありがとう。