图像处理代码举例(C++、MATLAB、OpenCV)

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

pbTag[y*newWidth+x]

见:https://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列对应的元素。

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

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

%原图

ima=rgb2gray(ima);

ima(:,:)=255;

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

https://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;

https://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);
            }

 

posted @ 2019-09-10 02:17  ostartech  阅读(1021)  评论(0编辑  收藏  举报