CvMat
マトリックスに変換された画像がありますCVMat source
と言います。 source
から関心領域を取得したら、残りのアルゴリズムをその関心領域のみに適用したいです。そのために、どうにかしてsource
マトリックスをトリミングする必要があると思いますが、それはできません。 CvMat
マトリックスをトリミングして、別のトリミングされたCvMat
マトリックスを返すことができるメソッドまたは関数はありますか?ありがとう。
OpenCVには、役に立つと思われる関心領域関数があります。 cv::Mat
を使用している場合、次のようなものを使用できます。
// You mention that you start with a CVMat* imagesource
CVMat * imagesource;
// Transform it into the C++ cv::Mat format
cv::Mat image(imagesource);
// Setup a rectangle to define your region of interest
cv::Rect myROI(10, 10, 100, 100);
// Crop the full image to that image contained by the rectangle myROI
// Note that this doesn't copy the data
cv::Mat croppedImage = image(myROI);
この質問はすでに解決されていることはわかっていますが、非常に簡単に切り取る方法があります。あなたは1行でそれを行うことができます-
Mat cropedImage = fullImage(Rect(X,Y,Width,Height));
さまざまなタイプのマトリックスに対してより良い結果と堅牢性を得るには、データをコピーする最初の答えに加えてこれを行うことができます:
cv::Mat source = getYourSource();
// Setup a rectangle to define your region of interest
cv::Rect myROI(10, 10, 100, 100);
// Crop the full image to that image contained by the rectangle myROI
// Note that this doesn't copy the data
cv::Mat croppedRef(source, myROI);
cv::Mat cropped;
// Copy the data into new matrix
croppedRef.copyTo(cropped);
必要な作物のコピーを作成するには、次のようにします。
// Read img
cv::Mat img = cv::imread("imgFileName");
cv::Mat croppedImg;
// This line picks out the rectangle from the image
// and copies to a new Mat
img(cv::Rect(xMin,yMin,xMax-xMin,yMax-yMin)).copyTo(croppedImg);
// Display diff
cv::imshow( "Original Image", img );
cv::imshow( "Cropped Image", croppedImg);
cv::waitKey();
この質問には答えられたと思いますが、おそらくこれは誰かに役立つかもしれません...
データを別のcv :: Matオブジェクトにコピーする場合は、次のような関数を使用できます。
void ExtractROI(Mat& inImage, Mat& outImage, Rect roi){
/* Create the image */
outImage = Mat(roi.height, roi.width, inImage.type(), Scalar(0));
/* Populate the image */
for (int i = roi.y; i < (roi.y+roi.height); i++){
uchar* inP = inImage.ptr<uchar>(i);
uchar* outP = outImage.ptr<uchar>(i-roi.y);
for (int j = roi.x; j < (roi.x+roi.width); j++){
outP[j-roi.x] = inP[j];
}
}
}
これは、単一チャネルイメージでのみ適切に機能することに注意することが重要です。