• 大小: 5.23MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-23
  • 语言: 其他
  • 标签: 畸变矫正  opencv  

资源简介

相同条件下拍到的棋盘图和日历钟表图,尝试建立几何畸变关系,并对它们进行恢复。

资源截图

代码片段和文件信息

/*--------------------------
Author: 叶耀祖
opencv version: opencv343
visual studio 2017
Date:2018/12/18
EMail:yaozuye@zju.edu.cn
--------------------------*/
#include 
#include 
#include 
#include 
# include

#define PI 3.14159
#define PHOTO_W 644
#define PHOTO_H 485
#define PHOTO_AREA (644*485)
# define PARAM_SIZE 8
using namespace cv;
using namespace std;

const Point2f CenterPoint(PHOTO_W / 2 PHOTO_H / 2);

void int2str(const int &int_temp string &string_temp)
{
stringstream stream;
stream << int_temp;
string_temp = stream.str();   //此处也可以用 stream>>string_temp  
}

//数字图像处理第一次作业源代码
void HK1()
{
Mat src = Mat(256 256 CV_8UC3 Scalar(0 0 0));
Mat src2 = Mat(640 640 CV_8UC3 Scalar(0 0 0));

int radius = 300;
Point center = Point(320 320);
circle(src2 center radius Scalar(255255255) -1);

Mat rectDst;

for (int i = 0; i < 256; i++)
{
for (int j = 0; j < 256; j++)
{
uchar Hue = uchar(180.0 / 255 * j);
uchar Satu = 255-i ;
uchar Value = 255;
src.at(ij) = Vec3b(Hue Satu Value);
}
}

for (int i = 0; i < 640; i++)
{
for (int j = 0; j < 640; j++)
{
if (src2.at(i j) == Vec3b(255 255 255))
{
int Hue = atan((320 - i)*1.0 / (j - 320)) / PI * 180 + 90;
if (j < 320)
{
Hue += 180;
}
uchar cvHue = Hue/2;
uchar saturation = 1.0*sqrt((320 - i)*(320 - i) + (j - 320)*(j - 320)) / radius * 255;
src2.at(i j) = Vec3b(cvHue saturation 255);
}
}
}

cvtColor(src2 src2 COLOR_HSV2RGB);
cvtColor(src src COLOR_HSV2RGB);
imshow(“rect“ src);
imshow(“circle“ src2);
imwrite(“rectDst.bmp“ src);
imwrite(“cirleDst.bmp“ src2);

waitKey(0);
}

bool absCompare(int a int b)
{
return abs(a) < abs(b);
}
//kernelSize为滤波器核的边长,k为近邻个数
void kNearMean(Mat &src8uc1 Mat &dst int k = 1 int kernelSize = 3)
{
int rows = src8uc1.rows;
int cols = src8uc1.cols;
int size = (kernelSize - 1) / 2;
int arrLen = kernelSize * kernelSize - 1;

//此处使用int是为了累加和减法不会溢出
int *sortArray = new int[arrLen];
int originValue;

for (int i = size; i < rows - size; i++)
{
for (int j = size; j < cols - size; j++)
{
int tempIndex = 0;
originValue = int(src8uc1.at(i j));
for (int tempi = i - size; tempi <= i + size; tempi++)
{
for (int tempj = j - size; tempj <= j + size; tempj++)
{
if (tempi != i || tempj != j)
{
sortArray[tempIndex] = int(src8uc1.at(tempi tempj)) - int(originValue);
tempIndex++;
}
}
}
sort(sortArray sortArray + arrLen absCompare);

int sumTemp = 0;

for (int temp = 0; temp < k; temp++)
{
sumTemp += sortArray[temp];
}
int dstValue = originValue + sumTemp*1.0 / k;
dst.at(i j) = uchar(dstValue);
}
}

delete[] sortArray;
}
void meanFilter(Mat &src8uc1 Mat &dst 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       81004  2018-12-13 20:16  chessGraph.jpg
     文件      288256  2018-12-28 22:26  ConfigTest.exe
     文件       82539  2018-12-13 20:16  distortion.jpg
     文件      121046  2018-12-28 22:28  dst.jpg
     文件       13868  2018-12-28 22:26  main.cpp
     文件     1917604  2018-12-27 22:45  my_video.avi
     文件     1343371  2018-12-29 14:28  opencv角点检测.png
     文件     2021330  2018-12-28 14:44  梯度下降拟合函数.gif
     文件     1343371  2018-12-29 14:28  畸变前角点.png
     文件     1253912  2018-12-27 20:35  结果图片.png

评论

共有 条评论