私は OpenCV を使用して Quartz Composer プラグインに取り組んでおり、cvCvtColor を介してグレーに変換された静止画像 (のみ) でこの問題が発生しています。私は2.4に取り組んでいますが、2.3でも同じ問題がありました:
ウェブカメラの画像ならなんでもOK。- iPhone からの直接の JPEG 画像用。しかし、他の画像では、この歪みの問題があります。
元の画像を拡大縮小すると、問題は修正されますが、問題を解決するにはあまり良い方法ではありません。
これが元の画像で、右側の画像は高さを 1.226 (???) でスケーリングしたものです。
誰もがこの問題を抱えていますか。IplImage で入力画像を変換するのが私のやり方ではないかと思っていましたが、同じ方法を使用している他のプログラムを見つけたので、私のコードは正しいようです...
出力のチャンネル数の問題でしょうか?
ありがとうございました。
編集 :
これがメソッドのコードです。
- (void) createWithInputImage: (id<QCPlugInInputImageSource>) image {
IplImage *r = NULL;
if (image != nil) {
// NSLog(@"Carasuelo OpenCV - width: %f", [image imageBounds].size.width);
CvSize size = cvSize([image imageBounds].size.width, [image imageBounds].size.height);
const char *colorModel;
const char *channelSeq;
int depth;
int channels;
if ([image bufferPixelFormat] == QCPlugInPixelFormatARGB8) {
depth = IPL_DEPTH_8U;
channels = 4;
colorModel = (char *)"RGBA";
channelSeq = (char *)"ARGB";
} else if ([image bufferPixelFormat] == QCPlugInPixelFormatBGRA8) {
depth = IPL_DEPTH_8U;
channels = 4;
colorModel = (char *)"RGBA";
channelSeq = (char *)"BGRA";
// QUARTZ COMPOSER IMAGES ARE ALWAYS BGRA8 -> 8U
} else if ([image bufferPixelFormat] == QCPlugInPixelFormatRGBAf) {
depth = IPL_DEPTH_32F;
channels = 4;
colorModel = (char *)"RGBA";
channelSeq = (char *)"RGBA";
} else if ([image bufferPixelFormat] == QCPlugInPixelFormatI8) {
depth = IPL_DEPTH_8U;
channels = 1;
colorModel = (char *)"GREY";
channelSeq = (char *)"GREY";
} else if ([image bufferPixelFormat] == QCPlugInPixelFormatIf) {
depth = IPL_DEPTH_32F;
channels = 1;
colorModel = (char *)"GREY";
channelSeq = (char *)"GREY";
} else {
NSLog(@"Format d'image non supporté: %@", [image bufferPixelFormat]);
}
r = cvCreateImage(size, depth, channels);
r->imageData = (char *)[image bufferBaseAddress];
strcpy(r->colorModel, colorModel);
strcpy(r->channelSeq, channelSeq);
}
[self setImageCV:r];
}
ありがとうございました !