如何用C、MATLAB、OpenCV实现图像处理代码的编写?

2026-04-16 21:154阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计562个文字,预计阅读时间需要3分钟。

如何用C、MATLAB、OpenCV实现图像处理代码的编写?

一、C中使用数组存储图像信息,下标引用:+pbTag[newWidth+x]见:https://www.cnblogs.com/wxl845235800/p/11149853.HRESULT Imagejoint(PBYTE pbSrc, int iWidth, int iHeight, double dbZoom, PBYTE pbTag)PBYTE pbSrc=NULL, pbTag=NULL;

一、C中用数组存图像信息,下标索引:

pbTag[y*newWidth+x]

见:www.cnblogs.com/wxl845235800/p/11149853.html

HRESULT Imagejoint(PBYTE pbSrc,int iWidth,int iHeight,double dbZoom,PBYTE pbTag)


PBYTE pbSrc=NULL,pbTag=NULL;//源图、目标图 PBYTE pbImage=NULL;//load图像后存在这 PDWORD pdwImage=NULL;//用于保存图像

CString str = "src4.bmp"; LPCTSTR filename = (LPCTSTR)str;

      cImage.Load(filename);

iWidth=cImage.GetWidth(); iHeight=cImage.GetHeight();

//分配源图内存 pbSrc = (PBYTE)malloc(iWidth*iHeight);


二、MATLAB用img(m,n),图像下标从1开始。

Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个。

A(2:3,3:-1:1)表示引用数组中的2~3行,3~1列对应的元素
A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列
A(1,end-1)表示引用第1行倒数第2个元素
A([2 1 3 3],[1 1 2 2 1])表示引用按两个向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列对应的元素。

blog.csdn.net/sinat_26492471/article/details/52959511

ima=double(imread(‘lenna2.bmp‘));

%原图

ima=rgb2gray(ima);

ima(:,:)=255;

如何用C、MATLAB、OpenCV实现图像处理代码的编写?

见:www.cnblogs.com/wxl845235800/p/10898203.html

www.cnblogs.com/wxl845235800/p/7700887.html

三、OpenCV中:调用矩阵元素

(float)img.at<char>(m,n)

Mat img = imread("test3.png",0);

std::cout<<(float)img.at<uchar>(1,1)<< std::endl;

www.cnblogs.com/wxl845235800/p/9082025.html

Mat img = imread("test.png",0);//灰度图

M=img.rows;//行数、图像高度 N=img.cols;//列数、图像宽度

cv::Mat F= (cv::Mat_<int>(64,4) <<

Mat out(2*M,N,CV_8UC1,Scalar(0));

for(col=0;col<N;col++) { for(row=0;row<2*M;row++) { double tmp=(row-1)/M+1/(2*64); int i=floor(tmp); int phaseNum=floor((tmp-i)*64)+1; if(i==0) { out.at<uchar>(row,col)= (float)img.at<uchar>(1,col)*F.at<uchar>(phaseNum,1)+ (float)img.at<uchar>(1,col)*F.at<uchar>(phaseNum,2)+ (float)img.at<uchar>(2,col)*F.at<uchar>(phaseNum,3)+ (float)img.at<uchar>(3,col)*F.at<uchar>(phaseNum,4); }

本文共计562个文字,预计阅读时间需要3分钟。

如何用C、MATLAB、OpenCV实现图像处理代码的编写?

一、C中使用数组存储图像信息,下标引用:+pbTag[newWidth+x]见:https://www.cnblogs.com/wxl845235800/p/11149853.HRESULT Imagejoint(PBYTE pbSrc, int iWidth, int iHeight, double dbZoom, PBYTE pbTag)PBYTE pbSrc=NULL, pbTag=NULL;

一、C中用数组存图像信息,下标索引:

pbTag[y*newWidth+x]

见:www.cnblogs.com/wxl845235800/p/11149853.html

HRESULT Imagejoint(PBYTE pbSrc,int iWidth,int iHeight,double dbZoom,PBYTE pbTag)


PBYTE pbSrc=NULL,pbTag=NULL;//源图、目标图 PBYTE pbImage=NULL;//load图像后存在这 PDWORD pdwImage=NULL;//用于保存图像

CString str = "src4.bmp"; LPCTSTR filename = (LPCTSTR)str;

      cImage.Load(filename);

iWidth=cImage.GetWidth(); iHeight=cImage.GetHeight();

//分配源图内存 pbSrc = (PBYTE)malloc(iWidth*iHeight);


二、MATLAB用img(m,n),图像下标从1开始。

Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个。

A(2:3,3:-1:1)表示引用数组中的2~3行,3~1列对应的元素
A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列
A(1,end-1)表示引用第1行倒数第2个元素
A([2 1 3 3],[1 1 2 2 1])表示引用按两个向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列对应的元素。

blog.csdn.net/sinat_26492471/article/details/52959511

ima=double(imread(‘lenna2.bmp‘));

%原图

ima=rgb2gray(ima);

ima(:,:)=255;

如何用C、MATLAB、OpenCV实现图像处理代码的编写?

见:www.cnblogs.com/wxl845235800/p/10898203.html

www.cnblogs.com/wxl845235800/p/7700887.html

三、OpenCV中:调用矩阵元素

(float)img.at<char>(m,n)

Mat img = imread("test3.png",0);

std::cout<<(float)img.at<uchar>(1,1)<< std::endl;

www.cnblogs.com/wxl845235800/p/9082025.html

Mat img = imread("test.png",0);//灰度图

M=img.rows;//行数、图像高度 N=img.cols;//列数、图像宽度

cv::Mat F= (cv::Mat_<int>(64,4) <<

Mat out(2*M,N,CV_8UC1,Scalar(0));

for(col=0;col<N;col++) { for(row=0;row<2*M;row++) { double tmp=(row-1)/M+1/(2*64); int i=floor(tmp); int phaseNum=floor((tmp-i)*64)+1; if(i==0) { out.at<uchar>(row,col)= (float)img.at<uchar>(1,col)*F.at<uchar>(phaseNum,1)+ (float)img.at<uchar>(1,col)*F.at<uchar>(phaseNum,2)+ (float)img.at<uchar>(2,col)*F.at<uchar>(phaseNum,3)+ (float)img.at<uchar>(3,col)*F.at<uchar>(phaseNum,4); }