サイズ変更なしで画像<グレー、バイト>をサイズ変更します。エグCV

Image.InRangeを使用して画像からマスクを作成しています。パフォーマンスを最大限に保つために、私はImage.ROIを使用して画像をトリミングし、InRangeメソッドを使用する前に使用しています。実際に画像で作業するためには、元の画像と同じ大きさにする必要がありますが、画像を保存する寸法を変更するのではなく、画像を拡大縮小する方法がわかります。

問題のコードは次のとおりです。

public Image Process(Image frameIn, Rectangle roi)
    {
        Image rectFrame = null;
        Image mask = null;
        if (roi != Rectangle.Empty)
        {
            rectFrame = frameIn.Copy(roi);
        }
        else
        {
            rectFrame = frameIn;
        }

        if (Equalize)
        {
            rectFrame._EqualizeHist();
        }


        mask = rectFrame.InRange(minColor, maxColor);

        mask ._Erode(Iterations);
        mask ._Dilate(Iterations);

        if (roi != Rectangle.Empty)
        {
            //How do I give the image its original dimensions?
        }

        return mask;
    }

ありがとうございました、 クリス

1
あなたはあなたがしたことを示す/質問の形でこれを置くことができますか?
追加された 著者 JesseBuesking,

1 答え

framInと同じサイズのマスクを返すことを前提とします。最も簡単な方法は、framInと同じサイズの新しいイメージにマスクをコピーすることです。あなたのアプリケーションが時間に敏感でない場合、framInと同じサイズのマスクを作成してROIを設定し、次に操作を行うことができます。これは処理に時間がかかり、ベストプラクティスではありません。

とにかくここでうまくいけばコードはあなたの後に私に知らせてください、私はそれに応じてそれを修正します。

if (roi != Rectangle.Empty)
{
    //Create a blank image with the correct size
    Image mask_return = new Image(frameIn.Size);
    //Set its ROI to the same as Mask and in the centre of the image (you may wish to change this)
    mask_return.ROI = new Rectangle((mask_return.Width - mask.Width)/2, (mask_return.Height - mask.Height)/2, mask.Width, mask.Height);
    //Copy the mask to the return image
    CvInvoke.cvCopy(mask, mask_return, IntPtr.Zero);
    //Reset the return image ROI so it has the same dimensions
    mask_return.ROI = new Rectangle(0, 0, frameIn.Width, frameIn.Height);
    //Return the mask_return image instead of the mask
    return mask_return;
}

return mask;

お役に立てれば、

乾杯、

クリス

1
追加された
ありがとう、それは完全に働いた!
追加された 著者 Chris Crutchfield,