[m,n,c]=size(im1); im1=im2double(im1);这两句matlab代码如何转变为C++代码
时间: 2024-03-26 07:41:02 浏览: 143
在C++中,可以使用OpenCV库来读取和处理图像,并将图像转换为双精度浮点数格式。下面是相应的C++代码:
```
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat im1 = imread("image.jpg"); // 读取图像文件
int m = im1.rows;
int n = im1.cols;
int c = im1.channels();
im1.convertTo(im1, CV_64F); // 转换为双精度浮点数格式
return 0;
}
```
需要注意的是,该代码需要安装OpenCV库,并在项目中添加相应的头文件和链接库。
相关问题
function [value] = CCFcontrast(A) T = 0.002; A = double(A); [m,n] = size(A); rb = 64; rc = 64; count = 1; blockrow = floor(m/rb); blockcol = floor(n/rc); l = blockrow*blockcol; for i=1:blockrow for j=1:blockcol row = rb*(i-1)+1:rb*i; col = rc*(j-1)+1:rc*j; A_temp = A(row,col); % check if block to be processed decision = get_edgeblocks_mod(A_temp,T); if (decision==1) contrast_JNB(count) = blkproc(A_temp,[rb rc],@get_contrast_block);%改为RMS计算方法 count = count + 1; end end end value = (sum(contrast_JNB))/l; % function im_out = get_edgeblocks_mod(im_in,T) im_in = double(im_in); [im_in_edge,th] = edge(im_in,'canny'); [m,n] = size(im_in_edge); L = m*n; im_edge_pixels = sum(sum(im_in_edge)); im_out = im_edge_pixels > (L*T) ; % function contrast_wy = get_contrast_block(A) [m,n] =size(A); contrast_wy =sqrt(sum(sum((A-mean2(A)).^2)/(n*m)));
这段代码实现了一个图像的对比度计算,具体实现过程如下:
1. 将输入的图像A转为double类型,获取图像的行列数m和n。
2. 定义rb和rc为64,即每个块的大小为64x64。
3. 计算图像分成多少个块,blockrow为行数除以rb的结果,blockcol为列数除以rc的结果,l为块的总数。
4. 对每个块进行处理,首先判断是否需要处理,判断条件为这个块的边缘像素数量是否大于总像素数量的T(T为0.002)。若需要处理,则对该块计算对比度,采用的计算方法为RMS(均方根)计算方法,计算公式为sqrt(sum(sum((A-mean2(A)).^2)/(n*m)))。
5. 对所有块的对比度值求平均数,即为该图像的对比度。
需要注意的是,这里使用了Matlab中的一些函数,如blkproc、edge等,需要事先了解相关函数的使用方法。
请帮我更改一下代码让图片显示与原图片大小一致,function Exponential_high_filter_Callback(hObject, eventdata, handles)%指数高通滤波 % hObject handle to Exponential_high_filter (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axis off; %%关闭坐标轴显示 global im; %%声明全局变量 global str; im = imread(str); Image=imnoise(im,'gaussian'); FImage=fftshift(fft2(double(Image))); [N,M]=size(FImage); g=zeros(N,M); r1=floor(M/2); r2=floor(N/2); d0=[20 50]; %截断频率 为 D0=50 n=2; for i=1:2 for x=1:M for y=1:N d=sqrt((x-r1)^2+(y-r2)^2); h=exp(-0.5*(d0(i)/d)^n); g(y,x)=h*FImage(y,x); end end g=ifftshift(g); g=real(ifft2(g)); end axes(handles.axes2); imshow(uint8(g));
在imshow函数中添加参数"InitialMagnification", "fit",即可让图片显示与原图片大小一致。更改后的代码如下:
function Exponential_high_filter_Callback(hObject, eventdata, handles)
%指数高通滤波
% hObject handle to Exponential_high_filter (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axis off; %%关闭坐标轴显示
global im; %%声明全局变量
global str;
im = imread(str);
Image=imnoise(im,'gaussian');
FImage=fftshift(fft2(double(Image)));
[N,M]=size(FImage);
g=zeros(N,M);
r1=floor(M/2);
r2=floor(N/2);
d0=[20 50]; %截断频率 为 D0=50 n=2;
for i=1:2
for x=1:M
for y=1:N
d=sqrt((x-r1)^2+(y-r2)^2);
h=exp(-0.5*(d0(i)/d)^n);
g(y,x)=h*FImage(y,x);
end
end
g=ifftshift(g);
g=real(ifft2(g));
end
axes(handles.axes2);
imshow(uint8(g), 'InitialMagnification', 'fit');
阅读全文