c++实现矩阵直接做dct变换

该博客介绍了如何使用C++编程实现矩阵的离散余弦变换(DCT)。通过对比,展示了C++的实现结果与MATLAB的相似性。
摘要由CSDN通过智能技术生成
#include <iostream>  
#include <string.h>
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2\core\mat.hpp>
#include<opencv2/opencv.hpp>//如果要包含所有库
#define PI 3.1415926
using namespace cv;
using namespace std;
//将mat类型转换为二维数组的类型
//进行dct变换
double Coun(int x)
{
	if (x != 0) return 1.0;
	return 1.0 / (sqrt(2.0));
}
void mydct(double (*matrix)[8], int M, int N)
{
	double matrix1[4][8];

	int p, q;
	int m, n;
	double ap, aq;
	double num;
	double max;
	//double *point = (double *)A.data;
	int i, j;
	//for (i = 0; i < M; i++)
	//{
	//	for (j = 0; j < N; j++)
	//	{
	//		//cout << point[i*N + j] << "\n";
	//		cout << A.at<float>(i, j) << "\n";
	//	}
	//}


	//for (p = 0; p < M; p++)
	//{
	//	cout << p << "\n";
	//	for (q = 0; q < N; q++)
	//	{
	//		double tmp = 0.0;

	//		for (m = 0; m < M; m++)
	//		{
	//			for (n = 0; n < N; n++)

	//			{
	//				tmp += A.data[m*N + n] * cos((2 * m + 1)*p*PI / (2.0 * M)) * cos((2 * n + 1)*q*PI / (2.0 * N));//每个像素对应的tmp值即累加式计算完毕
	//			}
	//		}
	//		//将像素值赋给B.data
	//		B.at<float>(p,q)= 2.0*Coun(p)*Coun(q)*tmp/M;
	//		cout << "p:" << p << " q:&#
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值