Tag: image processing

C#如何将获取的GetPixel / SetPixel颜色处理转换为Lockbits?

编辑:我非常感谢回复。 我在这里需要的不仅仅是示例代码,用于我在嵌套循环中使用几行代码所做的事情,因为这在GetPixel / SetPixel中是正常的,但也是我无法使用Lockbits工作的。 谢谢 我正在尝试将我的图像处理filter从GetPixel / SetPixel转换为Lockbits,以缩短处理时间。 我在Stack Overflow,MSDN和其他网站上也看过Lockbits教程,但是我做错了。 我从一个非常简单的filter开始,它简单地减少绿色以产生红色和紫色效果。 这是我的代码: private void redsAndPurplesToolStripMenuItem_Click(object sender, EventArgs e) { // Get bitmap from picturebox Bitmap bmpMain = (Bitmap)pictureBoxMain.Image.Clone(); // search through each pixel via x, y coordinates, examine and make changes. Dont let values exceed 255 or fall under 0. for (int y = 0; […]

Tesseract空白页面

我使用tesseract来检测图像上的字符。 try { using (var engine = new TesseractEngine(@”C:\Users\ea\Documents\Visual Studio 2015\Projects\ocrtTest”, “eng”, EngineMode.Default)) { using (var img = Pix.LoadFromFile(testImagePath)) { Bitmap src = (Bitmap)Image.FromFile(testImagePath); using (var page = engine.Process(img)) { var text = page.GetHOCRText(1); File.WriteAllText(“test.html”, text); //Console.WriteLine(“Text: {0}”, text); //Console.WriteLine(“Mean confidence: {0}”, page.GetMeanConfidence()); int p = 0; int l = 0; int w = 0; […]

如何使用EmguCV模糊部分图像?

我们从汽车中获取了大量用于项目的图像。 为了满足隐私规范,我们需要检测面部和牌照,然后模糊这些区域。 我开始了解Emgucv项目, http: //www.emgu.com/wiki/index.php/License_Plate_Recognition_in_CSharp上的教程对于检测Licensplates非常有用。 有没有办法使用Emgu本身模糊这个区域?

Gabor滤波器在频域中的实现

这里我们有Gaborfilter的Spatial域实现。 但是, 出于性能原因 ,我需要在频域中实现Gabor滤波器。 我找到了Gabor滤波器的频域方程 : 我实际上对这个公式的正确性和/或适用性存有疑问。 源代码 所以,我已经实现了以下内容: public partial class GaborFfftForm : Form { private double Gabor(double u, double v, double f0, double theta, double a, double b) { double rad = Math.PI / 180 * theta; double uDash = u * Math.Cos(rad) + v * Math.Sin(rad); double vDash = (-1) * u […]

JPEG压缩的TIFF比原始JPEG大得多

我正在尝试使用FreeImage.Net和C#将JPEG转换为使用JPEG压缩的TIFF 。 这很好,但是,对于低质量的JPGES,TIFF文件比原始文件大很多。 我假设TIFF大小不依赖于原始的JPEG质量,因为输出图像总是大致相同。 例如(转换屏幕截图): 2065kb JPEG (quality: 100%) –> 1282kb TIFF 379kb JPEG (quality: 50%) –> 1200kb TIFF 这种规模的增加对我们公司来说是不可接受的,因为我们的客户和我们正在处理大量文件。 有趣的是,当我用GIMP转换图像时,我得到了相同的结果。 现在我想知道: 这是根据TIFF标准还是特别的FreeImage / GIMP? (我认为两者都使用libtiff.dll )。 我想还有另一种方法,因为我们公司有一台扫描仪可以生成图像为JPEG压缩的TIFF,尺寸更小。 有没有人知道另一个库 (无论是否免费)可以更有效地处理这种转换,或者在FreeImage中实现这一点? 更新: 我看了一下TIFF 6.0规范 ,分析了我们的扫描仪生成的文件,并且能够编写一个将JPEG包装到一个非常简单的TIFF容器中的函数(也可以使用多个JPEG合并到多页TIFF中)。 对于那些对TIFF有所了解的人:我根据图像/页面的数量生成了一个新的TIFF文件(带有一个或多个IFD),并将现有JPEG图像的原始数据写入单个条带(每个IFD),使用以下字段/条目: NewSubfileType = 0 ImageWidth = //(width of the original JPEG) ImageLength = //(height of the original JPEG) BitsPerSample = {8, […]

如何使用EMGU计算DFT及其反转?

如何计算图像的DFT(使用EMGU),显示它然后计算反转以恢复原始图像? 我将在这里回答我自己的问题,因为我花了一段时间才弄明白。

双线性插值 – DirectX与GDI +

我有一个C#应用程序,我已经编写了GDI +代码,它使用Bitmap / TextureBrush渲染来呈现2D图像,这些图像可以应用各种图像处理function。 此代码是模拟现有DX9代码的应用程序中的新路径,它们共享一个公共库以执行所有向量和矩阵(例如ViewToWorld / WorldToView)操作。 我的测试床由DX9输出图像组成,我将其与新GDI +代码的输出进行比较。 渲染到与Bitmap尺寸匹配的视口(即没有缩放或平移)的简单测试用例确实匹配像素完美(没有二进制差异) – 但是一旦图像被放大(放大),我就会得到非常小的差异在5-10%的像素中。 差异的大小是1(偶尔2)/ 256。 我怀疑这是由于插值差异造成的。 问题 :对于DX9正射投影(和身份世界空间),相机垂直并以纹理四边形为中心,期望DirectX.Direct3D.TextureFilter.Linear生成相同的输出到GDI + TextureBrush填充的矩形/多边形是合理的使用System.Drawing.Drawing2D.InterpolationMode.Bilinear设置? 对于这个(放大)情况,DX9代码正在使用它(MinFilter,MipFilter设置类似): Device.SetSamplerState(0, SamplerStageStates.MagFilter, (int)TextureFilter.Linear); 并且GDI +路径正在使用: g.InterpolationMode = InterpolationMode.Bilinear; 我认为“双线性插值”是一个相当具体的滤波器定义,但后来我注意到GDI +中还有另一种选择“HighQualityBilinear”(我尝试过,没有区别 – 考虑到“添加预滤波”的描述,这是有道理的缩小“) 后续问题:期望DirectX和GDI +之间的像素完美输出匹配是否合理(假设传入的所有外部坐标相等)? 如果没有,为什么不呢? 澄清:我正在使用的图像是使用Format32bppPArgb的不透明灰度(R = G = B,A = 1)。 最后,我可以使用许多其他API(Direct2D,WPF,GDI等) – 这个问题通常适用于比较“等效”双线性插值输出图像的输出。 谢谢!

使用混合模式颜色在另一个图像上绘制图像

在Photoshop中,您可以选择“颜色”(从底部开始的第二个)将混合模式设置为下一个较低层: 如果图像顶部只有一个渐变,结果可能如下所示: 我在某处找到的颜色混合模式的描述是: 颜色将下层的色调和饱和度改变为上层的色调和饱和度,但仅留下亮度。 到目前为止我的代码是: using(var g = Graphics.FromImage(canvas)) { // draw the lower image g.DrawImage(lowerImg, left, top); // creating a gradient and draw on top using (Brush brush = new LinearGradientBrush(new Rectangle(0, 0, canvasWidth, canvasHeight), Color.Violet, Color.Red, 20)) { g.FillRectangle(brush, 0, 0, canvasWidth, canvasHeight); } } 但那是 – 当然 – 只是在较低的图像上绘画。 所以问题是: 如何使用Photoshop中提供的混合模式“颜色”在另一个图像上绘制图像? 编辑: […]

使用GDI +创建的图像未在VB6 LeadTools中显示

我们有使用VB6构建的遗留应用程序。 这些应用程序使用的是铅工具。 一切都很完美。 我们有另一个.NET进程来优化图像(并进行一些水印)并以tiff格式保存。 这是.NET代码的一瞥, using (var bitmap = new Bitmap(contractWidth, contractHeight)) { using (var canvas = Graphics.FromImage(bitmap)) { canvas.InterpolationMode = InterpolationMode.Default; // Play with canvas canvas.Save(); } using (var stream = new MemoryStream()) { bitmap.Save(stream, ImageFormat.Tiff); return stream.ToArray(); } } 当我们以tiff格式保存时(比如image.tif)。 但是当我们在VB6项目上打开这个文件时,它会显示一个蓝屏。 我试图比较正在工作的图像和不起作用的图像。 这是屏幕, 工作: 不工作: 更新:这解决了我的问题将TIFF转换为1位

Tesseract OCR引擎无法从自动生成的图像中读取文本,但可以从MS Paint中的CUT读取

我正在为Tesseract OCR引擎使用.NET包装器。 我有一个大型文档是PNG。 当我在MS油漆中切出一段图像然后将其送入引擎时,它可以工作。 但是当我在代码中执行此操作时,引擎无法识别图像中的文本。 图像看起来相同,并且属性不会显得非常偏离。 所以我有点困惑。 这是两张图片。 来自MS涂料: 来自代码: 这是我从MS油漆图像中得到的: 并通过代码: 他们真的很相似所以我不确定为什么它不能识别第二个文本。 以下是我如何生成图像。 public Bitmap CropImage(Bitmap source, Rectangle section) { Bitmap bmp = new Bitmap(section.Width, section.Height); Graphics g = Graphics.FromImage(bmp); g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel); return bmp; } private void Form1_Load(object sender, EventArgs e) { Bitmap source = new Bitmap(test); Rectangle section = new […]