1. 程式人生 > >OpenCV對影象進行mask操作

OpenCV對影象進行mask操作

這裡的mask操作指的是,對一幅影象image,有一個binary的mask影象,image_masked = image & mask

可以採用 Mat的copyTo成員函式,利用mask引數實現。

#include <opencv2/core/core.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
    if( argc != 3)
    {
     cout << argv[0] << " <image> <thresh_val>" << endl;
     return -1;
    }

    Mat image;
    image = imread(argv[1], IMREAD_COLOR); // Read the file
    if(! image.data ) // Check for invalid input
    {
        cout << "Could not open or find the image" << std::endl ;
        return -1;
    }

	// convert to gray
	Mat img_gray;
	cvtColor(image, img_gray, CV_BGR2GRAY);

	// threshold to get mask
	int threshold_value = atoi(argv[2]);
	int max_BINARY_value = 256;
	Mat mask;
	threshold(img_gray, mask, threshold_value, max_BINARY_value, THRESH_BINARY);

	// mask image
	Mat img_masked;
	image.copyTo(img_masked, mask);

	imshow( "image", image );
	imshow( "mask", mask );
	imshow( "img_masked", img_masked );
    waitKey(0); // Wait for a keystroke in the window
    return 0;
}