J'utilise Opencv 3.0 pour obtenir uniquement les objets colorés dans une image. Par conséquent, je crée et utilise un masque.OpenCV inRange masquage
#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;
}
Comme vous pouvez le voir l'image de résultat n'est pas l'image voulue. Seuls les objets colorés doivent rester, car ils ont un fond blanc dans le masque, mais il semble que l'image résultante soit une combinaison de source et de masque.
Quelqu'un sait-il comment résoudre ce problème?
Source:
Masque:
Résultat:
Image du masque https://ibb.co/nyHnbv – GGotpimus
Avant la 'copyTo', 'dstImg' est tout zéros - c'est-à-dire tout noir. 'copyTo' ne modifiera que les zones où le masque est blanc - le reste reste tel qu'il était avant, c'est-à-dire tout en noir. –