这次先上效果图:
/* 图像感兴趣区域设置处理 */ #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() { double t = (double)getTickCount(); Mat img = imread("D://图片//1.jpeg"); Mat log = imread("D://图片//5.jpg"); Mat result = img.clone(); if (img.empty() || log.empty()) { cout << "加载失败!" << endl; return -1; } Mat imgroi = img(Rect(img.cols - log.cols, 0, log.cols, log.rows)); log.copyTo(imgroi); //直接复制到对应的区域 //addWeighted(imgroi, 0.6, log, 0.5, 0, imgroi); //三者的大小必须相同 Mat imgX(img.rows, img.cols, CV_32F); Mat imgY(img.rows, img.cols, CV_32F); for (int i = 0; i < img.rows; i++) { for (int j = 0; j < img.cols; j++) { imgX.at<float>(i, j) = j; //保持在同一列 imgY.at<float>(i, j) = i + 23*sin(j); /* imgX.at<float>(i, j) = j; //竖直变换 imgY.at<float>(i, j) = img.rows - i - 1; */ } } remap(result, result, imgX, imgY, INTER_LINEAR); //imshow("show_imgroi", imgroi); imshow("show_img", img); //imshow("show_log", log); imshow("show_result", result); double Time = ((double)getTickCount() - t) / getTickFrequency(); cout << "Time = " << Time << endl; waitKey(0); destroyAllWindows; return 0; }