OpenCV基础课程笔记23像素重映射

编程入门 行业动态 更新时间:2024-10-06 10:41:51

OpenCV基础课程笔记23<a href=https://www.elefans.com/category/jswz/34/1768605.html style=像素重映射"/>

OpenCV基础课程笔记23像素重映射

写在前面

这节内容里面的不管左右反转、上下翻转,还是旋转180度,都比较好理解,最难理解的是做小微原图的二分之一,这个我到现在仍有点蒙圈。
贾志刚老师调程序调出来的右下是有夹缝的,然后弹幕里面有人说他这个写的有问题,于是我到处去搜博客。
贾志刚老师在第一节课加上的0.5,博客里面有减去0.5,也有不加不减(贾志刚老师下节课认为不加不减才对)。
我自己尝试发现减去0.25之后,能消掉夹缝,但是,也只是对于女友大粗腿下采样.jpg这一张图来说的,画了半天图,大致明白了,这个和像素有很大关系,加不加,加多少,这得看像素多少,没有一个普遍性的加减方式(目前没有在网上找到)。

代码

#include<iostream>
#include<opencv2/opencv.hpp>
#include<cmath>
using namespace std;
using namespace cv;int index = 0;
void updateMap();
Mat map_x, map_y;
Mat src = imread("A:\\专用\\TestForTheCV\\代替女友出境.jpg");
Mat dst;int main() {imshow("图片", 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 = (char)c - '0';updateMap();remap(src, dst, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(255, 0, 0));imshow("srcToDst", dst);}waitKey(0);return 0;
}
void updateMap() {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 + 0.5 );//	map_y.at<float>(row, col) = 2 * (row - src.rows*0.25 + 0.5 );下面的处理方式还是会留着一圈像素,不知道为什么,暂时没想明白。//map_x.at<float>(row, col) = 2 * (col - src.cols*0.25f -0.25);//map_y.at<float>(row, col) = 2 * (row - src.rows*0.25f -0.25);//下一节课解决问题,但是我用女友性感大粗腿下采样仍然有蓝边				map_x.at<float>(row, col) = 2 * (col - src.cols*0.25f);map_y.at<float>(row, col) = 2 * (row - src.rows*0.25f);//后来搞懂一点,这个和输入图片的像素有关系,不是都要-0.5,也不是都不减,但是还有一点蒙圈}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 - 1 - col);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 - 1 - row);break;case 3:map_x.at<float>(row, col) = (src.cols - 1 - col);map_y.at<float>(row, col) = (src.rows - 1 - row);break;}}}}

运行结果




更多推荐

OpenCV基础课程笔记23像素重映射

本文发布于:2024-02-07 06:09:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753782.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:像素   课程   基础   笔记   OpenCV

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!