Opencv(C++)笔记

您所在的位置:网站首页 opencv扫码 Opencv(C++)笔记

Opencv(C++)笔记

2022-12-30 04:29| 来源: 网络整理| 查看: 265

目录

1--概念

2--Opencv API

3--实例代码

1--概念

        从图像中的一个像素点获取其像素值,并将这个像素值映射到新图像中另一个像素点位置的过程;

        为了完成整个映射过程,有时需对非整数像素位置进行插值,因为源图像和目标图像之间并不总是存在一对一的像素对应关系。

2--Opencv API

cv::remap(src, dst, map_x, map_y, cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar(0, 255, 255)); 3--实例代码 # include # include # include void update_map(cv::Mat src, cv::Mat map_x, cv:: Mat map_y, int idx){ for(int row = 0; row < map_x.rows; row++){ for(int col = 0; col < map_x.cols; col++){ switch (idx){ case 0: // 缩小 if (col > (map_x.cols*0.25) && col < (map_x.cols*0.75) && row > (map_x.rows*0.25) && row < (map_x.rows*0.75)){ map_x.at(row, col) = (float)(2 * (col - (map_x.cols*0.25) + 0.5)); map_y.at(row, col) = (float)(2 * (row - (map_x.rows*0.25) + 0.5)); } else{ map_x.at(row, col) = 0; map_y.at(row, col) = 0; } break; case 1: // 左右颠倒 map_x.at(row, col) = (float)(map_x.cols - col - 1); map_y.at(row, col) = (float)(row); break; case 2: // 上下颠倒 map_x.at(row, col) = (float)(col); map_y.at(row, col) = (float)(map_x.rows - row - 1); break; case 3: // 上下左右颠倒 map_x.at(row, col) = (float)(map_x.cols - col - 1); map_y.at(row, col) = (float)(map_x.rows - row - 1); break; } } } } int main(int argc, char** argv){ cv::Mat src; cv::Mat map_x; cv::Mat map_y; cv::Mat dst; int idx; src = cv::imread("C:/Users/Liujinfu/Desktop/opencv_bilibili/test1.jpg"); if (src.empty()){ printf("could not load image..\n"); return -1; } cv::imshow("input", src); map_x.create(src.size(), CV_32FC1); map_y.create(src.size(), CV_32FC1); int c = 0; while(true){ c = cv::waitKey(10); if(c == 27){ // esc键 break; } idx = c % 4; update_map(src, map_x, map_y, idx); cv::remap(src, dst, map_x, map_y, cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar(0, 255, 255)); cv::imshow("output", dst); } return 0; }

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3