void RhoanaBlocksGainCompensator::apply(int index, Point /*corner*/, InputOutputArray _image, InputArray /*mask*/) { CV_INSTRUMENT_REGION() ///CV_Assert(image.type() == CV_8UC3); CV_Assert(_image.type() == CV_8UC1); UMat u_gain_map; if (gain_maps_[index].size() == _image.size()) u_gain_map = gain_maps_[index]; else resize(gain_maps_[index], u_gain_map, _image.size(), 0, 0, INTER_LINEAR); Mat_<float> gain_map = u_gain_map.getMat(ACCESS_READ); Mat image = _image.getMat(); for (int y = 0; y < image.rows; ++y) { const float* gain_row = gain_map.ptr<float>(y); ///Point3_<uchar>* row = image.ptr<Point3_<uchar> >(y); uchar* row = image.ptr<uchar>(y); for (int x = 0; x < image.cols; ++x) { ///row[x].x = saturate_cast<uchar>(row[x].x * gain_row[x]); ///row[x].y = saturate_cast<uchar>(row[x].y * gain_row[x]); ///row[x].z = saturate_cast<uchar>(row[x].z * gain_row[x]); row[x] = saturate_cast<uchar>(row[x] * gain_row[x]); } } }
static inline void _drawMatch( InputOutputArray outImg, InputOutputArray outImg1, InputOutputArray outImg2 , const KeyPoint& kp1, const KeyPoint& kp2, const Scalar& matchColor, DrawMatchesFlags flags ) { RNG& rng = theRNG(); bool isRandMatchColor = matchColor == Scalar::all(-1); Scalar color = isRandMatchColor ? Scalar( rng(256), rng(256), rng(256), 255 ) : matchColor; _drawKeypoint( outImg1, kp1, color, flags ); _drawKeypoint( outImg2, kp2, color, flags ); Point2f pt1 = kp1.pt, pt2 = kp2.pt, dpt2 = Point2f( std::min(pt2.x+outImg1.size().width, float(outImg.size().width-1)), pt2.y ); line( outImg, Point(cvRound(pt1.x*draw_multiplier), cvRound(pt1.y*draw_multiplier)), Point(cvRound(dpt2.x*draw_multiplier), cvRound(dpt2.y*draw_multiplier)), color, 1, LINE_AA, draw_shift_bits ); }