你可以使用一個子圖像無論是Rect
或兩個Range
(見OpenCV的doc)。
Mat3b img = imread("path_to_image");
IMG:
Rect r(100,100,200,200);
Mat3b roi3b(img(r));
只要你不改變圖像類型,你可以在roi3b
工作。所有更改都將反映在原始圖像img
在:
模糊後
GaussianBlur(roi3b, roi3b, Size(), 10);
IMG:
如果更改類型(例如,從CV_8UC3
到CV_8UC1
),你需要在深工作複製,因爲Mat
不能有混合類型。
Mat1b roiGray;
cvtColor(roi3b, roiGray, COLOR_BGR2GRAY);
threshold(roiGray, roiGray, 200, 255, THRESH_BINARY);
您可以隨時複製原圖上的結果,同時注意糾正類型:
參考全碼:閾值之後
Mat3b roiGray3b;
cvtColor(roiGray, roiGray3b, COLOR_GRAY2BGR);
roiGray3b.copyTo(roi3b);
IMG:
#include <opencv2\opencv.hpp>
using namespace cv;
int main(void)
{
Mat3b img = imread("path_to_image");
imshow("Original", img);
waitKey();
Rect r(100,100,200,200);
Mat3b roi3b(img(r));
GaussianBlur(roi3b, roi3b, Size(), 10);
imshow("After Blur", img);
waitKey();
Mat1b roiGray;
cvtColor(roi3b, roiGray, COLOR_BGR2GRAY);
threshold(roiGray, roiGray, 200, 255, THRESH_BINARY);
Mat3b roiGray3b;
cvtColor(roiGray, roiGray3b, COLOR_GRAY2BGR);
roiGray3b.copyTo(roi3b);
imshow("After Threshold", img);
waitKey();
return 0;
}
你在思考和演示方面非常經典。 – Arjun