• OpenCV 计算机视觉(十七)像素重映射


    像素重映射:

    就是把原图像中的像素点通过相应的操作,变换到另一图片的相应位置。

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    using namespace cv;
    Mat src, dst, map_x, map_y;
    const char* OUTPUT_TITLE = "remap demo";
    int index = 0;
    void update_map(void);
    int main(int argc, char** argv) {
    	src = imread("D:/OpenCVprj/image/test3.jpg");
    	if (!src.data) {
    		printf("could not load image...
    ");
    		return -1;
    	}
    	char input_win[] = "input image";
    	namedWindow(input_win, CV_WINDOW_AUTOSIZE);
    	namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);
    	imshow(input_win, src);
    
    	map_x.create(src.size(), CV_32FC1);
    	map_y.create(src.size(), CV_32FC1);
    
    	int c = 0;
    	while (true) {
    		c = waitKey(500);
    		if ((char)c == 27) {
    			break;
    		}
    		index = c % 4;
    		update_map();
    		remap(src, dst, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 255, 255));
    		imshow(OUTPUT_TITLE, dst);
    	}
    
    	return 0;
    }
    
    void update_map(void) {
    	for (int row = 0; row < src.rows; row++) {
    		for (int col = 0; col < src.cols; col++) {
    			switch (index) {
    			case 0:
    				if (col >(src.cols * 0.25) && col < (src.cols*0.75) && row >(src.rows*0.25) && row < (src.rows*0.75)) {
    					map_x.at<float>(row, col) = 2 * (col - (src.cols*0.25));
    					map_y.at<float>(row, col) = 2 * (row - (src.rows*0.25));
    				}
    				else {
    					map_x.at<float>(row, col) = 0;
    					map_y.at<float>(row, col) = 0;
    				}
    				break;
    			case 1:
    				map_x.at<float>(row, col) = (src.cols - col - 1);
    				map_y.at<float>(row, col) = row;
    				break;
    			case 2:
    				map_x.at<float>(row, col) = col;
    				map_y.at<float>(row, col) = (src.rows - row - 1);
    				break;
    			case 3:
    				map_x.at<float>(row, col) = (src.cols - col - 1);
    				map_y.at<float>(row, col) = (src.rows - row - 1);
    				break;
    			}
    
    		}
    	}
    }
    

      

      

  • 相关阅读:
    hibernate.cfg.xml
    java util 巧用
    Ant
    WEB文件上传二 (Struts 文件上传)
    web文件上传一学习记录 (简单的web浏览器可读文件的上传,servlet 文件上传)
    long类型的时间转为n秒前n分钟前n小时前或者日期
    各种String类型的时间转long型,long转String
    Android 内容提供者(ContentProvider)的简单实用
    sql性能优化总结(转)
    数据添加到DataTable
  • 原文地址:https://www.cnblogs.com/haiboxiaobai/p/11248654.html
Copyright © 2020-2023  润新知