gpt4 book ai didi

image - 如何在图像处理中更多地增加像素强度差异?

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:41 24 4
gpt4 key购买 nike

我有一张图片,如附图所示。有时,数字的黑色强度与其相邻像素没有太大差异,我在提取这些数字时遇到问题(例如,设置阈值效率不高,因为黑色的强度由于反射或聚焦不佳而接近灰色的强度在图像捕获期间)。我喜欢让它在黑色和背景灰色之间有更大的区别,这样我就可以在没有太多噪音的情况下提取数字。我所做的是使用 OpenCV 中的 addWeighted 函数增加差异。 color 是原始 RGB 图像。它对我的处理是否有意义,或者是否有更有效的方法?

Mat blur_img = new Mat(color.size(), color.type());
org.opencv.core.Size size = new Size(9,9);
Imgproc.GaussianBlur(color, blur_img, size, 2);
Mat sharpened = new Mat(color.size(), CvType.CV_32FC3);
Core.addWeighted(color, 1.5, blur_img, -0.5, 0, sharpened);

最佳答案

你需要做局部阈值处理(bernsen、sauvola、local otsu 等),opencv 也恰好有 adaptiveThreshold 函数。这是一个例子。只需确保使用这些参数即可。

自适应阈值

adaptiveThreshold

伯恩森

bernsen

代码

#include <opencv2/opencv.hpp>
using namespace cv;

Mat thresh_bernsen(Mat& gray,int ksize,int contrast_limit)
{
Mat ret = Mat::zeros(gray.size(),gray.type());
for(int i=0;i<gray.cols;i++ )
{
for(int j=0;j<gray.rows;j++ )
{
double mn=999,mx=0;
int ti=0,tj=0;
int tlx=i-ksize/2;
int tly=j-ksize/2;
int brx=i+ksize/2;
int bry=j+ksize/2;
if(tlx<0) tlx=0;
if(tly<0) tly=0;
if(brx>=gray.cols) brx=gray.cols-1;
if(bry>=gray.rows) bry=gray.rows-1;

minMaxIdx(gray(Rect(Point(tlx,tly),Point(brx,bry))),&mn,&mx,0,0);
/* this does the above
for(int ik=-ksize/2;ik<=ksize/2;ik++)
{
for(int jk=-ksize/2;jk<=ksize/2;jk++)
{
ti=i+ik;
tj=j+jk;
if(ti>0 && ti<gray.cols && tj>0 && tj<gray.rows)
{
uchar pix = gray.at<uchar>(tj,ti);
if(pix<mn) mn=pix;
if(pix>mx) mx=pix;
}
}
}*/
int median = 0.5 * (mn+mx);
if(median<contrast_limit)
{
ret.at<uchar>(j,i)=0;
}else
{
uchar pix = gray.at<uchar>(j,i);
ret.at<uchar>(j,i) = pix>median?255:0;
}
}
}
return ret;
}
int main()
{
Mat gray = imread("c:/data/number.jpg",0);
gray=255-gray;
Mat adaptthresh,bernsen;
adaptiveThreshold(gray,adaptthresh,255,ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,41,1);
bernsen=thresh_bernsen(gray,25,40);
imshow("gray",gray);
imshow("adaptthresh",adaptthresh);
imshow("bernsen",bernsen);
waitKey(0);
}

关于image - 如何在图像处理中更多地增加像素强度差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22383671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com