0
我使用Opencv 3.0只獲取圖像中的彩色對象。因此我創建並使用了一個面具。openCV inRange masking
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
namedWindow("Display", CV_WINDOW_AUTOSIZE);
namedWindow("Orignial", CV_WINDOW_AUTOSIZE);
namedWindow("Mask", CV_WINDOW_AUTOSIZE);
// First load your image
Mat mSrc = imread("IMG_0005_AUSZUG2.png", CV_LOAD_IMAGE_COLOR);
Mat mGray = Mat::zeros(mSrc.size(), mSrc.type());
cvtColor(mSrc, mGray, CV_BGR2GRAY);
// define your mask
Mat mask = Mat::zeros(mSrc.size(), mSrc.type());
// define destination image
Mat dstImg = Mat::zeros(mSrc.size(), mSrc.type());
//finding mask
inRange(mSrc, Scalar(90, 90, 90), Scalar(180, 180, 180), mask);
// combination of mask and Source image
dilate(mask, mask, Mat(), Point(-1, -1));
bitwise_not(mask, mask);
//cvtColor(mask, mask, CV_GRAY2BGR);
mSrc.copyTo(dstImg, mask);
//bitwise_and(mSrc, mSrc, dstImg, mask);
imshow("Mask", mask);
imshow("Orignial", mSrc);
imshow("Display", dstImg);
waitKey(0);
return 0;
}
正如你所看到的結果圖像不是預期的一個。只有彩色物體應該保留,因爲它們在蒙版中具有白色背景,但似乎結果圖像是源和蒙版的組合。
有人知道如何解決這個問題嗎?
來源:
面膜:
結果:
圖片面具https://ibb.co/nyHnbv – GGotpimus
的'copyTo'之前, 'dstImg'全部爲零 - 即全黑。 'copyTo'將只修改蒙版爲白色的區域 - 其餘部分保持原樣,即全黑。 –