MCPcopy Create free account
hub / github.com/KAlO2/PerfectShow / blendIris

Function blendIris

jni/venus/region_operation.cpp:1370–1425  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1368}
1369
1370void blendIris(cv::Mat& image, const cv::Mat& iris, const std::vector<cv::Point2f>& points, float amount)
1371{
1372 // iris right index 42�� left index 43
1373 const int iris_indices_r[] = {35, 37, 39, 41};
1374 const int iris_indices_l[] = {45, 47, 49, 51};
1375 float iris_radius_r = distance(points[42], points[iris_indices_r[0]]);
1376 for(size_t i = 1; i < NELEM(iris_indices_r); ++i)
1377 {
1378 float dist = distance(points[42], points[iris_indices_r[i]]);
1379 if(iris_radius_r > dist)
1380 iris_radius_r = dist;
1381 }
1382
1383 float iris_radius_l = distance(points[43], points[iris_indices_l[0]]);
1384 for(size_t i = 1; i < NELEM(iris_indices_l); ++i)
1385 {
1386 float dist = distance(points[43], points[iris_indices_l[i]]);
1387 if(iris_radius_l > dist)
1388 iris_radius_l = dist;
1389 }
1390
1391 cv::Mat iris2;
1392 if(iris.channels() == 3)
1393 cvtColor(iris, iris2, CV_BGR2BGRA);
1394 iris2.convertTo(iris2, CV_32FC4, 1/255.0);
1395
1396 const Vec3f FROM_COLOR(1.0f, 1.0f, 1.0f); // white
1397 for(int r = 0; r < iris2.rows; ++r)
1398 for(int c = 0; c < iris2.cols; ++c)
1399 {
1400 Vec4f& color = iris2.at<Vec4f>(r, c);
1401 color = venus::color2alpha(color, FROM_COLOR);
1402 }
1403 iris2.convertTo(iris2, CV_8UC4, 255.0);
1404// cv::imwrite("color2alpha.png", iris2);
1405
1406 // TODO it seems this value fit every iris image in res/drawable/
1407 const float iris_image_radius = (84.0f - 12.0f)/2;
1408
1409 Mat iris_r, iris_l;
1410 float iris_ratio_r = iris_radius_r / iris_image_radius;
1411 float iris_ratio_l = iris_radius_l / iris_image_radius;
1412 cv::resize(iris2, iris_r, Size(), iris_ratio_r, iris_ratio_r);
1413 cv::resize(iris2, iris_l, Size(), iris_ratio_l, iris_ratio_l);
1414
1415 const Point2f& iris_center_r = points[42];
1416 const Point2f& iris_center_l = points[43];
1417 Point2i iris_position_r(iris_center_r.x - (iris_r.cols >> 1), iris_center_r.y - (iris_r.rows >> 1));
1418 Point2i iris_position_l(iris_center_l.x - (iris_l.cols >> 1), iris_center_l.y - (iris_l.rows >> 1));
1419
1420 RoiInfo eye_info_r = calcuateEyeRegionInfo_r(points);
1421 RoiInfo eye_info_l = calcuateEyeRegionInfo_l(points);
1422
1423 blend(iris_r, image, eye_info_r.mask, iris_position_r, amount);
1424 blend(iris_l, image, eye_info_l.mask, iris_position_l, amount);
1425}
1426
1427cv::Mat resize(const cv::Mat& image, const Point2f& pivot,

Callers

nothing calls this directly

Calls 6

distanceFunction · 0.85
color2alphaFunction · 0.85
calcuateEyeRegionInfo_rFunction · 0.85
calcuateEyeRegionInfo_lFunction · 0.85
blendFunction · 0.85
resizeFunction · 0.70

Tested by

no test coverage detected