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) );
}
}