求各位大佬帮忙!!!
opencv吧
全部回复
仅看楼主
level 1
#include <iostream>
#include <opencv2/opencv.hpp>
#include "Math.h"
#include "Eigen/Dense"
using namespace std;
using namespace cv;
using namespace Eigen;
char *file_name;
char **qr_img;
//int width, height;
int i, j;
//输入图像*image_data
//输出图像**qr_img
static int image_gray(char **qr_img, char *image_data, int w, int h) //灰度处理
{
int i, j;
int b, g, r;
int Y;
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
b = *image_data++;
g = *image_data++;
r = *image_data++;
Y = 0.3*r + 0.59*g + 0.11*b; //阈值
qr_img[i][j] = (Y > 255) ? 255 : Y;
}
}
imshow("灰度图", **qr_img);
return 0;
}
int main()
{
int Rmax = 0, Rmin = 255;
int T, T0, T1; //原平均值,小于阀域值均值(前景),大于阀域值均值(背景)
int S0, S1; //小于阈域值图像点灰度值累加(前景),大于阈域值图像点灰度值累加(背景)
int n0 = 0, n1 = 0;//小于阀域值图像点个数累加(前景),大于阀域值图像点个数累加(背景)
int w, h;
cv::Mat M = imread("f:/5.jpg");
IplImage img = M;
IplImage *image = cvCloneImage(&img);
w = image->width;
h = image->height;
//开辟内存空间
qr_img = (char **)malloc(w * sizeof( char *));
for (i = 0; i < w; i++) {
qr_img[i] = (char *)malloc(h * sizeof( char));
}
//灰度处理
image_gray(qr_img, img.imageData, w, h);
//迭代法
for (i = 0; i < h; i++) {
for (j = 0; j < w; j++) {
if (qr_img[i][j]>Rmax)
{
Rmax = qr_img[i][j];
}
if (qr_img[i][j]<Rmin)
{
Rmin = qr_img[i][j];
}
}
}
T = (Rmax + Rmin) / 2; //求平均值
//循环求最终的阈值T
while (1)
{
S0 = 0, S1 = 0;
n0 = 0, n1 = 0;
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
if (qr_img[i][j] > T)
{
S1 += qr_img[i][j]; //背景
n1 += 1;
}
if (qr_img[i][j] <= T)
{
S0 += qr_img[i][j]; //前景
n0 += 1;
}
}
}
T0 = S0 / n0; //计算前景平均灰度值
T1 = S1 / n1; //计算背景平均灰度值
if (abs(T - (T0 + T1) / 2)<0.01) //确定最终阈值,当差值为0.01时看作阈值不发生变化
{
break;
}
else
{
T = (T0 + T1) / 2; //求新阈值
}
}
// 二值化处理
for (i = 0; i < w; i++) {
for (j = 0; j < h; j++) {
qr_img[i][j] = (qr_img[i][j] > T) ? 255 : 0;
}
}
imshow("二值化", **qr_img);
//释放空间
for (i = 0; i < w; i++) {
free(qr_img[i]);
}
free(qr_img);
waitKey(0);
return 0;
}
运行时
0x00007FFEA86F8283 (ntdll.dll) (Project2.exe 中)处有未经处理的异常: 0xC0000374: 堆已损坏。 (参数: 0x00007FFEA874F6B0)。
0x00007FFEA48B7788 处(位于 Project2.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x000000A6F20FDE70 处。
求各位大神帮忙!!!
2018年04月23日 01点04分 1
1