- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一张图片,如附图所示。有时,数字的黑色强度与其相邻像素没有太大差异,我在提取这些数字时遇到问题(例如,设置阈值效率不高,因为黑色的强度由于反射或聚焦不佳而接近灰色的强度在图像捕获期间)。我喜欢让它在黑色和背景灰色之间有更大的区别,这样我就可以在没有太多噪音的情况下提取数字。我所做的是使用 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
函数。这是一个例子。只需确保使用这些参数即可。
自适应阈值
伯恩森
代码
#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/
我正在开发一个录音机应用程序。我想知道在录制音频时有什么方法可以找到音频的强度。我不想将录音保存在任何地方。我只想向用户展示麦克风捕捉到的声音是否大于预定义的阈值。 假设如果声音低于 2 分贝,它应该
我正在尝试让一个基本服务器(从 Beginning Python 复制)来发送一个 str。 错误: c.send( "XXX" ) TypeError: must be bytes or buffe
我陷入了一个问题,不知道去哪里看。我需要增加图像中特定颜色的强度,例如 R、G 或蓝色。当我这样做时,某些颜色无法正确呈现。 下面是我为测试拍摄的图像: 现在当我像绿色一样增加时: A = Color
我不希望我的背景图片太模糊。没有调整模糊强度的属性吗? let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) blurEffect
我使用 OpenCV 2.4.11+Qt 并尝试制作视频并更改红色/蓝色或绿色 channel 的强度,但没有找到任何功能或设置来执行此操作。有谁知道如何做到这一点? 最佳答案 如果您只想更改一个特定
当我有 x、y、强度时,我不知道如何创建热图(或等高线图)。我有一个看起来像这样的文件: 0,1,6 0,2,10 .... 到目前为止: with open('eye_.txt', 'r') as
有谁有一些可以在 iPhone 应用程序中使用的代码,让我可以看到 wifi 的强度吗?我有一个连接密集型操作,并且希望它们不在不稳定区域 最佳答案 这可能会帮助您走上正确的道路...... http
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
Eclipse SSH key 生成屏幕(常规 -> 网络连接 -> SSH2)生成 1024 位 RSA key ,该 key 太弱而无法使用 ( http://news.netcraft.com/
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
我们的网络应用程序使用 the Vibrate API对于微妙的按钮按下效果: window.navigator.vibrate(5); 但在我的新手机上,感觉不那么微妙,更像是我的手机正试图从我手中
我的应用程序应扫描周围的 Wifi 信号并列出网络名称及其 RSSI。 我在谷歌上找不到任何关于如何做的线索。有人可以举个例子或者至少指出其他地方我可以找到答案吗? 最佳答案 我认为这不可能!不管是
所以我的图像有一些黑点,它们看起来很简单,所以我想我可以创建一个亮度图,将其反转,然后将其应用到我的图像以消除黑点。然而,我所能找到的只有两种均衡方法:均衡整个图像(使用直方图)或将图像分割成深色和浅
我是一名优秀的程序员,十分优秀!