帮我把这个c语言帮助文档程序改编成C++ 谢谢

一个C语言小程序,请帮助改成C++程序!急!谢谢
[问题点数:100分,结帖人pcwwa]
一个C语言小程序,请帮助改成C++程序!急!谢谢
[问题点数:100分,结帖人pcwwa]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。&& 查看话题
【求助】帮我编个程啊~C语言,C++,Matlab,VB...都行~
拜托各位编程高手帮我编个程啊,高金币悬赏哦~是关于图像处理的,用C语言,C++,Matlab,VB等等都行。
&&编写处理“K近邻平滑滤波”的程序,原理是:以待处理的像素作为中心,取一个3X3的模板,在模板中选择5个与待处理像素的值最接近的像素,将这5个像素的均值替换原来的像素值。
&&举个直观的例子吧,给定3X3的模板如下:
6& &8& &7& && && && && && &(6+7+5+6+8)/5=6.4=6(四舍五入)
& &最后中心像素值8被6替换。
&&编程的时候不要用具体的像素值,用代号(比如说a、b、c......)代替就好了。
&&多谢各位高手了,小女感激不尽啊!
貌似不难。不过有几个问题:
1、总图像有多大。(以估算计算量)
2、怎样选取最接近的像素。
3、为什么只有中心的8被替换?不是6 7 5 6 8这五个像素都被替换? Originally posted by holmescn at
貌似不难。不过有几个问题:
1、总图像有多大。(以估算计算量)
2、怎样选取最接近的像素。
3、为什么只有中心的8被替换?不是6 7 5 6 8这五个像素都被替换? 先谢谢你的捧场啊~这个程序只要针对一个3X3的模板来编程就好了,不用管总图像的大小的。至于怎样选取最接近的像素,我的想法是用其他8个像素值与中心像素值作差,然后再将差值排序,从而可以选出最接近的5个值,不知道高手有没有更好地方法呢?最后一个问题嘛,这个方法的原理就是这样的,只替换中心像素值,呵呵~
你能帮我编这个程序吗?感激不尽啊~ 我可以尝试一下。不过,有deadline吗?因为我的课程也比较紧。不是每天都能coding阿。
而且我也不是CS专业的……每天coding只能是梦想了……:rol:
1、只考虑3X3矩阵是不是说只给出关键代码就可以了?其他部分你自己实现吗?
还是需要全部的,可以装载某一个图形的。
2、不用给一个GUI界面吧?我可以写一个CUI界面的。这样简单一点。 Originally posted by holmescn at
我可以尝试一下。不过,有deadline吗?因为我的课程也比较紧。不是每天都能coding阿。
而且我也不是CS专业的……每天coding只能是梦想了……:rol:
1、只考虑3X3矩阵是不是说只给出关键代码就可以了 ... 六月之前就好啦~呵呵~只要关键代码就可以啦~只要能编出来就好啦,不管什么方法的,如果编出来,我愿把剩下的所有金币都给你~ 这用matlab容易实现吧 定义一个和原图像同样大小的矩阵,然后将处理好的每一个像素赋值到新矩阵中就可以了。实现过程用二重循环,将模板在原图像覆盖一遍。
“将这5个像素的均值替换原来的像素值”可以对中心像素的八领域均减去中心像素的灰度,取绝对值后排序找到最小的五个对应的原像素,然后取均值~~
这是我思路~不妥之处望指出~~ % K近邻平滑滤波
% input - 输入图像矩阵;n - 模板大小(3,5,7...);k - 近邻数
% output - 滤波处理后的图像矩阵
function output = emuchKNNMeanFilter(input, n, k)
& &&&= size(input);
& & edgeWidth = floor(n / 2);
& & output = zeros(row - edgeWidth * 2, col - edgeWidth * 2);
& & for i = 1 + edgeWidth : row - edgeWidth
& && &&&for j = 1 + edgeWidth : col - edgeWidth
& && && && &mask = input(i - edgeWidth : i + edgeWidth,...
& && && && && & j - edgeWidth : j + edgeWidth);
& && && && &center = input(i, j);
& && && && &vertex = Matrix2Vertex(mask);
& && && && &neighbour = GetNeighbour(vertex, center, k);
& && && && &output(i - 1, j - 1) = mean(neighbour);
& && &&&end
% 根据输入的向量与中心值取近邻值
% vertex - 输入向量;center - 中心值;k - 近邻数
% neighbour - 近邻值
function neighbour = GetNeighbour(vertex, center, k)
& & distance = abs(vertex - center);
& &&&= sort(distance,1);
& & neighbour = vertex(sortIndex(2 : k + 1));
% 将矩阵转换为向量
function vertex = Matrix2Vertex(matrix)
& &&&= size(matrix);
& & vertex = zeros(row * col, 1);
& & for i = 1 : row * col
& && &&&vertex(i) = matrix(i);
思路与7楼一致
调用方法:
将以上代码存为文件emuchKNNMeanFilter.m,在matlab command window中调用。
例如,有矩阵
164& & & & 24& & & & 196& & & & 119& & & & 209& & & & 51
200& & & & 139& & & & 53& & & & 23& & & & 250& & & & 244
125& & & & 218& & & & 11& & & & 129& & & & 247& & & & 86
103& & & & 67& & & & 39& & & & 20& & & & 147& & & & 38
224& & & & 198& & & & 183& & & & 42& & & & 60& & & & 84
181& & & & 163& & & & 33& & & & 191& & & & 74& & & & 29
211& & & & 185& & & & 56& & & & 85& & & & 172& & & & 197
3& & & & 228& & & & 116& & & & 78& & & & 146& & & & 202
调用程序进行处理:b = emuchKNNMeanFilter(a, 3, 5)
得到处理后的矩阵
180.6& & & & 61.2& & & & 101.6& & & & 189.6
126.8& & & & 40.4& & & & 56.4& & & & 171.2
92.2& & & & 53.8& & & & 56.2& & & & 121.2
170.8& & & & 132.2& & & & 45.2& & & & 53.4
191.6& & & & 105.8& & & & 114.8& & & & 60
179.8& & & & 95& & & & 71.4& & & & 164.2 将每个邻域的灰度值和模板中心灰度值想减取绝对值(度量距离),对距离进行排序,取前五个。然后相加取平均就可以了。 抱歉,这个真不懂怎么做呀! 本人刚学图像处理!新人一个,谢谢各位前辈! 顶一下,感谢分享! 小妞,opencv图像处理有现成的,不用改 犀利的代码~有木有专门的图像处理的小组啊:arm::dragon13: 是每个像素点都要处理吗?那么处于图像边框上的像素点怎么处理?直接将其所有的邻近像素点相加,然后取平均值?这是一个C语言/c++的问题,求高手帮我解答 谢谢_百度知道
这是一个C语言/c++的问题,求高手帮我解答 谢谢
#include&iostream.h&#define N 8main(){ int a[N],b[N],c[N],d[N],i1,i2,i3,i4;
a[N]=(20,34,48,66,71,80,91,104,110); b[N]=(30,40,54,70,84,90,103,110,120); c[N]=(33,38,52,82,95,99,110,122,135); d[N]=(40,哗锭糕瓜蕹盖革睡宫精50,63,97,105,112,134,144,150); 其中z等于a[i1]+b[i2]+c[i3]+d[i4]i1+i2+i3+i4的值要小于等于N 。。。要求出所有的Z=a[i1]+b[i2]+c[i3]+d[i4]的值求高手帮我解答啊
真的很急啊
提问者采纳
#include&iostream.h&#define N 8int main() {
int a[N],b[N],c[N],d[N],i1,i2,i3,i4;
a[N]=(20,34,48哗锭糕瓜蕹盖革睡宫精,66,71,80,91,104,110);
b[N]=(30,40,54,70,84,90,103,110,120);
c[N]=(33,38,52,82,95,99,110,122,135);
d[N]=(40,50,63,97,105,112,134,144,150);
for (i1 = 0;i1 &= N;i1++) {
for (i2 = 0;i2 + i1 &= N;i2++) {
for (i3 = 0;i3 + i2 + i1 &= N;i3++) {
for (i4 = 0;i4 + i3 + i2 + i1 &= N;i4++) {
z = a[i1]+b[i2]+c[i3]+d[i4];
return 0;}
提问者评价
其他类似问题
为您推荐:
其他6条回答
#include&iostream.h&#define N 8main(){ int i1,i2,i3,i4;
int a[N]={20,34,48,66,71,80,91,104,110}; int b[N]={30,40,54,70,84,90,103,110,120}; int c[N]={33,38,52,82,95,99,110,122,135}; int d[N]={40,50,63,97,105,112,134,144,150}; for(i1=0;i1&N;i1++) for(i2=0;i2&N;i2++) for(i3=0;i3&N;i3++) for(i4=0;i4&N;i4++) if(i1+i2+i3+i4&=N) { z=a[i1]+b[i2哗锭糕瓜蕹盖革睡宫精]+c[i3]+d[i4]; cout&&z&&}}
首先你定义的是只有8个数的数组啊,怎么数组里有9个数啊?四个for循环应该可以解决吧i1=i2=i3=i4=7;for(;i1&=0;i1--){
if(i1+i2+i3+i4&N)
for(;i2&=0;i2--)
if(i1+i2+i3+i4&N)
}还有i3和i4自己写下吧,嗯,每个循环把数打出来就好了
for(i1=0,i2=0,i3=0,i4=0;i1&N&&i2&N&&i3&N&&i4&N;i1++,i2++,i3++,i4++)if(i1+i2+i3+4&=N)
我用这个运行之后没有我想要的答案啊。。。。 。。。。 汗
能不能把完整代码给我啊
谢谢啊。。。
#include&iostream.h&#define N 8main(){ int a[N],b[N],c[N],d[N],i1,i2,i3,i4;
a[N]=(20,34,48,66,71,80,91,104,110); b[N]=(30,40,54,70,84,90,103,110,120); c[N]=(33,38,52,82,95,99,110,122,135); d[N]=(40,50,63,97,105,112,134,144,150);
for(i1=0,i2=0,i3=0,i4=0;i1&N&&i2&N&&i3&N&&i4&N;i1++,i2++,i3++,i4++)
if(i1+i2+i3+4&=N)
z=a[i1]+b[i2]+c[i3]+d[i4]
return 0;}
怎么选个错的答案啊?!楼主知道a[N]=(20,34,48,66,71,80,91,104,110);的运行结果是什么吗?这个已经不是数组赋初值了!!首先它就数组越界,其次表达式(20,34,48,66,71,80,91,104,110);的结果是什么?数组赋初值的写法:int a[N]={20,34,48,66,71,80,91,104,110};
您可能关注的推广回答者:回答者:
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁急!哪位能帮我把这个c语言程序变成c++的 真心感谢 要挂科啦555_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:163,353贴子:
急!哪位能帮我把这个c语言程序变成c++的 真心感谢 要挂科啦555收藏
都说这个是个初级程序 但是我不会啊帮帮忙 粉你~~~include&stdio.h& #include&stdlib.h& #include&time.h& //用于存放随机数用int a[10]; void rand10(void) { int i,j, //初始化随机数,根据时间srand((unsigned)time(NULL)); //得到 10 到 100内的随机数for(i=0;i&10;i++) { a[i]=rand()%90+10; } //从打到小排列生成的随机数,采用冒泡排序法for(i=0;i&9;i++) { for(j=i+1;j&10;j++) { if(a[i]&a[j]){ tmp=a[i]; a[i]=a[j]; a[j]= } } } printf("the random numbers are:\n"); //打印生成的随机数for(i=0;i&10;i++) { printf("%4d",a[i]); //5个5个的为一行if((i+1)%5==0)printf("\n"); } } void searchin(void) { int i, printf("input a number:"); //等待用户输入要查询的数scanf("%d",&num); //循环查找for(i=0;i&10;i++) { //如果找到就打印出来if(a[i]==num){printf("the number [%d] is in the array.\n",num);
对于这种的,两个语言区别大么?……    ------这里是一个小尾巴,改成你要文字吧。~
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或用梯形法编程求函数f(x)=x2+2x+1的定积分 求大神帮我把这个题有c语言或c++编出来,急用,谢谢了_百度知道
用梯形法编程求函数f(x)=x2+2x+1的定积分 求大神帮我把这个题有c语言或c++编出来,急用,谢谢了
提问者采纳
2;stdio这个其实很简单;
y=x*x+x*2+1,int n)
/&#47, 1;i++;=1)return 0,效率很高;
printf(&quot.0;}void main(){ double s,s);n&quot,已经做过优化;i&
x=a,x;n;2;}double Integrate(double (*f)(double);;=n;
for(int i=0,double a,自己一调用就可以了;
if(n&lt,y;&#47, double f(double x)
&#47.0;s=%lf&#92。 #include &lt.h&gt,给你做了一个很简单的通用的积分函数;
sy-=f(b)&#47,x+=dx)
sy+=f(x);计算函数的定积分{ double dx, 3.0.0;
return sy*
s=Integrate(f;
dx=(b-a)&#47,返回函数的值{
提问者评价
其他类似问题
为您推荐:
其他1条回答
#include&stdio.h&
#include&math.h&
double simp(double a,double b,double eps, double (*f)())
double h,t1,t2,s1,s2,ep,p,x;
t1 = h *( (*f)(a) + (*f)(b) ) / 2.0; //计算T1=(b-a)/2*[f(a)+f(b)]
//用 t1 代替s1
ep = eps + 1.0;
while(ep &= eps)
for( k = 0; k &= n - 1; k++)
x = a + ( k + 0.5) *
p = p + (*f)(x);
t2 = (t1 + h * p) / 2.0;
s2 = (4.0 * t2 - t1) / 3.0;
ep = fabs( s2 - s1 ); //计算精度
printf(&n=%d\n&,n);
= h / 2.0;
return(s2);
double simpf(double x)
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信