Có tác dụng chuyển ảnh thành tập hợp những hình tròn nhỏ
Tham số là: ảnh gốc, ảnh kết quả và kích thước của điểm tròn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
int ColoredDot(Mat src, int circleSize, Mat &dstImg) { if (!src.data) return -1; dstImg = Mat::zeros(src.size(), CV_8UC3); Mat cir = Mat::zeros(src.size(), CV_8UC1); for (int i = 0; i < src.rows; i += circleSize) { for (int j = 0; j < src.cols; j += circleSize) { Rect rect = Rect(j, i, circleSize, circleSize) & Rect(0, 0, src.cols, src.rows); Mat sub_dst(dstImg, rect); sub_dst.setTo(mean(src(rect))); circle( cir, Point(j + circleSize/2, i + circleSize/2), circleSize/2 - 1, CV_RGB(255,255,255), -1, CV_AA ); } } Mat cir_32f; cir.convertTo(cir_32f, CV_32F); normalize(cir_32f, cir_32f, 0, 1, NORM_MINMAX); Mat dst_32f; dstImg.convertTo(dst_32f, CV_32F); vector<Mat> channels; split(dst_32f, channels); for (int i = 0; i < channels.size(); ++i) channels[i] = channels[i].mul(cir_32f); merge(channels, dst_32f); dst_32f.convertTo(dstImg, CV_8U); } |