OpenCVを使用してiOSでライブビデオ処理を行っています。
画像に対していくつかの処理を行います。まず画像を検査してオーバーレイを描画し、次に 2 倍にズームします。
ではprocessImage
、最初のステップだけを実行すれば問題ありませんが、関数の呼び出しを追加するとzoom
、画像が非常に白く半透明になります。
これが私のコードです:
static void resizeLock_(cv::Mat &img, int rows, int cols){
cv::Size newSize;
newSize.width = cols;
newSize.height = rows;
cv::resize(img, img, newSize,0, 0, CV_INTER_AREA);
}
static void zoom(cv::Mat &img, int ratio){
cv::Size originalSize = img.size();
resizeLock_(img,img.rows*ratio,img.cols*ratio);
double c = ((double)ratio -1)/(double)2;
img(cv::Rect(cvRound(originalSize.width*c),cvRound(originalSize.height*c),originalSize.width,originalSize.height)).copyTo(img);
}
...
- (void)processImage:(Mat&)image;
{
doProcessing(image);
// if the next call is omitted, image looks fine.
zoom(image,2);
}