Emgu.CV
灰階
二值化
边缘检测
public void TestRun(Bitmap bitmap)
{
Image<Bgr, Byte> img = new Image<Bgr, Byte>(bitmap);
//灰階
Image<Gray, Byte> gray = img.Convert<Gray, Byte>().PyrDown().PyrUp();
//二值化
Image<Gray, Byte> gray1 = gray.ThresholdToZero(new Gray(Settings.ThresholdToZero));
//http://www.cnblogs.com/xrwang/archive/2010/03/03/ImageFeatureDetection.html.
//Canny算子也可以用作边缘检测
Image<Gray, Byte> gray2 = gray1.Canny(new Gray(Settings.LowThresh), new Gray(Settings.HighThresh));
int iiW = CurrentImage.Width;
int iiH = CurrentImage.Height;
Bitmap image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(image))
{
Rectangle rct1 = new Rectangle(new Point(0, 0), new Size(iiW / 2, iiH / 2));
g.DrawImage(img.Bitmap, rct1, new Rectangle(new Point(0, 0), new Size(iiW, iiH)), GraphicsUnit.Pixel);
g.DrawRectangle(new Pen(Color.Black), rct1);
Rectangle rct2 = new Rectangle(new Point(0, iiW / 2), new Size(iiW / 2, iiH / 2));
g.DrawImage(gray.Bitmap, rct2, new Rectangle(new Point(0, 0), new Size(iiW, iiH)), GraphicsUnit.Pixel);
g.DrawRectangle(new Pen(Color.Black), rct2);
Rectangle rct3 = new Rectangle(new Point(iiH / 2, 0), new Size(iiW / 2, iiH / 2));
g.DrawImage(gray1.Bitmap, rct3, new Rectangle(new Point(0, 0), new Size(iiW, iiH)), GraphicsUnit.Pixel);
g.DrawRectangle(new Pen(Color.Black), rct3);
Rectangle rct4 = new Rectangle(new Point(iiH / 2, iiW / 2), new Size(iiW / 2, iiH / 2));
g.DrawImage(gray2.Bitmap, rct4, new Rectangle(new Point(0, 0), new Size(iiW, iiH)), GraphicsUnit.Pixel);
g.DrawRectangle(new Pen(Color.Black), rct4);
}
pictureBox1.Image = image;
}
找出你個大叉叉、就能關閉了
怎麼找點?
一種是整張圖掃描、慢但是有效、
另一種事先用內建的功能找線、在透過每條線間拼成一個rect
LineSegment2D[] lines = gray2.HoughLinesBinary(
1, //Distance resolution in pixel-related units
Math.PI / 45.0, //Angle resolution measured in radians.
5, //threshold
5, //min Line width
5 //gap between lines
)[0]; //Get the lines from the first channel
因為點很小、所以參數都要設小、
在把每條線轉換成框框、把相交的框框合併成一個大框框、就會抓到類似叉叉的框
// //抓出资料
// MCvBox2D box1 = new MCvBox2D(new PointF(rct.X + rct.Width / 2, rct.Y + rct.Height / 2), rct.Size, 0);
// Image<Gray, byte> img2 = gray2.Copy(box1);
如何比对?
最简单的方式、用md5算出那张图罗、只有一个问题、错位就完全不一样了、
另一种方式、算x轴跟y轴的点数量、转换成12345.56786、就可以比对相似度了、
針對正常字型的數字、計算X軸直方圖、搭配Y軸直方圖、可以找出跟計算出相似度、就可以猜了、
聯合利華公司引進了一條香皂包裝生產線,
結果發現這條生產線有個缺陷:常常會有盒子沒裝入香皂。
結果發現這條生產線有個缺陷:常常會有盒子沒裝入香皂。
總不能把空盒子賣給顧客啊,
他們只得請了一個學自動化的博士後設計一個方案
來分揀空的香皂盒。
博士後拉起了一個十幾人的科研公關小組,綜合採用了機械、微電子、自動化、X光探測等技術, 花了幾十萬,成功解決了問題。
每當生產線上有空香皂盒通過,兩旁的探測器會檢測到,並且驅動一隻機械手把空皂盒推走。
中國南方有個鄉鎮企業也買了同樣的一條香皂包裝生產線,老闆發現這個問題後大為發火,找了個小工來說:「你他媽給老子把這個搞定,不然你給老子滾蛋~。」
小工很快想出了辦法:他在生產線旁邊放了台風扇猛吹,空皂盒自然會被吹走。
在我搞了一堆辨識、計算後............................................
我最後的方案是:
放了個瀏覽器、計時器、然後固定分鐘重刷、
我要的目的就達到的、facebook遊戲掛線、
只要VPN不要斷、
真他嗎的簡單....................................orz
機車、出現了ImageCode、e04
圖形縮放
- CV_INTER_NN - 最近邻插值,
- CV_INTER_LINEAR - 双线性插值 (缺省使用)
- CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..
- CV_INTER_CUBIC - 立方插值.
===================
搞了C#
現在來學學維修筆電