1.opencv
将边缘检测的结果edged复制过来,对轮廓排序,最大的轮廓为边缘
变换(orig为原始图像的副本,第二个参数是根据比率将resize后的图像还原回去)
rect为原始坐标点,dst为计算后想要变换的坐标点
二值处理让得到的结果更加清晰
2.算法(蓝桥杯)
迷宫
#include <bits/stdc++.h>
using namespace std;
struct Node {
int x,y;//坐标
int f;
int num;
int w;//方向
}a[2605];
void Set(int k,int x,int y,int f,int num,int w)
{
a[k].x = x;
a[k].y = y;
a[k].f = f;
a[k].num = num;
a[k].w = w;
}
char mp[55][55];
bool book[55][55];
// 右R 上U 下D 左L
int n,m,Next[4][2]={1,0,0,-1,0,1,-1,0};
string ans = "DLRU";
void ShowPath(int k)
{
if(a[k].f != -1) {
ShowPath(a[k].f);
cout << ans[a[k].w];
}
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%s",mp[i]+1);
memset(book,false,sizeof book);
queue< Node> q;
int k=1;
Set(k,1,1,-1,k,-1);
book[1][1] = true;
q.push(a[k++]);
int tx,ty;
bool flag = false;
while(!q.empty()) {
Node t = q.front();//队首元素
for(int i=0;i<4;i++) {
tx = t.x + Next[i][0];
ty = t.y + Next[i][1];
if(tx < 1 || tx > n || ty < 1 || ty > m)
continue;//走出边界
if(mp[tx][ty] == '0' && !book[tx][ty]) {//可以走并且没被走过
book[tx][ty] = true;
Set(k,tx,ty,t.num,k,i);//录入位置信息
q.push(a[k++]);//入队
}
if(tx == n && ty == m) {
flag = true;
break;
}
}
if(flag)
break;
q.pop();
}
ShowPath(--k);
}
特别数的和
#include<stdio.h>
int main()
{
int sum=0,pog=0;
int i,j,n;
scanf("%d",&n);
for(j=1;j<=n;j++)
{
pog=0;
i=j;
while(i!=0)//让i进入判断数字,以防改变j
{
if(i%10==2||i%10==0||i%10==1||i%10==9)
{
pog=1;//观测值
}
i=i/10;
}
if(pog==1)
{
sum+=j;
}
}
printf("%d",sum);
return 0;
}