uelordi01
1/23/2018 - 9:42 AM

Get boundary for a region

Inrange function with draw contours, get boundary.

void Java_kanvas_org_utils_JniManager_getBoundary(JNIEnv *env, jclass type, jlong imagein,
                                                  jlong imageOut) {

    cv::Mat  &inMat =*(cv::Mat*) imagein;
    cv::Mat &outMat = *(cv::Mat*) imageOut;
    cv::Mat mask = cv::Mat(inMat.rows, inMat.cols, CV_8UC1);
    std::vector<std::vector<cv::Point> > contours;
    std::vector<cv::Vec4i> hierarchy;
    int sensitivity = 10;
    cv::Scalar LOWER_RED(56, 15, 218);
    cv::Scalar HIGHER_RED(67, 20, 219);
    int values[]  = {60,19,219};
    mask.setTo(0);
    if( inMat.rows > 0 && inMat.cols > 0 )
    {
        for(int i = 0; i < inMat.rows; i++ ) {
            for(int j = 0; i < inMat.cols; j++ ) {
                cv::Vec3b intensity = inMat.at<cv::Vec3b>(i, j);
                if(intensity[0] == values[0] &&
                        intensity[1] == values[1] &&
                        intensity[2] == values[2]) {
                    mask.at<uchar>(i, j) = 255;
                }
            }
        }
        cv::drawContours(outMat, contours, -1, cv::Scalar(0,255,0), 2 , 8);
        cv::inRange(mask,LOWER_RED, HIGHER_RED, mask);
        cv::findContours(mask, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE,
                         cv::Point(0, 0) );
    }
}