• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Nhờ mọi người về xác định điểm đen trong ảnh!

Góc trao đổi, hỏi đáp của ngôn ngữ Visual Basic 6 và Visual Basic Script

Điều hành viên: tungblt

Hình đại diện của người dùng
ducpkh
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 511
Ngày tham gia: T.Sáu 24/08/2012 12:28 pm
Đến từ: ADAFA
Has thanked: 9 time
Been thanked: 27 time

Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi ducpkh » T.Tư 21/11/2012 9:24 pm

Mình đang làm 1 form về xác định điểm đen trong ảnh có phải là điểm đen tuyệt đối không sau đó xác định vị trí điểm này mà chưa có hướng giải quyết. Có bác nào biết không chỉ giúp với!.
Tập tin đính kèm
XAC DINH DIEM DEN.rar
(1.64 KiB) Đã tải 190 lần



Hình đại diện của người dùng
Zeroplus
Guru
Guru
Bài viết: 546
Ngày tham gia: T.Bảy 16/04/2011 11:31 pm
Đến từ: Gò Dầu - Tây Ninh
Has thanked: 6 time
Been thanked: 98 time
Liên hệ:

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi Zeroplus » T.Bảy 24/11/2012 11:29 am

Bạn thử dùng API GetPixel rồi cho chạy từ Trên xuống, Trái qua phải của Picture. Nếu Hàm GetPixel trả về màu đen thì ta xác định được tọa độ. Mà cách này với hình lớn thì lâu lắm

Hình đại diện của người dùng
ducpkh
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 511
Ngày tham gia: T.Sáu 24/08/2012 12:28 pm
Đến từ: ADAFA
Has thanked: 9 time
Been thanked: 27 time

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi ducpkh » T.Bảy 24/11/2012 8:45 pm

Mình đã dùng hàm đó và làm được. Đúng là với ảnh lớn thì lâu thật. Bạn cho mình hỏi. Nếu điểm đen đó ở bên phải và mình muốn quét từ bên phải sang trái và trên xuống dưới thì code như thế nào vậy?

Hình đại diện của người dùng
Zeroplus
Guru
Guru
Bài viết: 546
Ngày tham gia: T.Bảy 16/04/2011 11:31 pm
Đến từ: Gò Dầu - Tây Ninh
Has thanked: 6 time
Been thanked: 98 time
Liên hệ:

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi Zeroplus » T.Bảy 24/11/2012 10:48 pm

Bạn dùng 2 vòng lặp lồng nhau là được
Ví dụ có picture tên là Pic

  1. For i=0 to Pic.ScaleHeight -1
  2.       For j=0 to Pic.ScaleWidth -1
  3.             Mamau=getPixel(Pic.hdc,i,j)
  4.       Next
  5. Next

Hình đại diện của người dùng
ducpkh
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 511
Ngày tham gia: T.Sáu 24/08/2012 12:28 pm
Đến từ: ADAFA
Has thanked: 9 time
Been thanked: 27 time

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi ducpkh » CN 25/11/2012 11:41 am

Code bạn đưa ra là quét từ Tráiqua phải còn ý của mình hỏi là quét từ Phải qua Trái cơ?

Hình đại diện của người dùng
Zeroplus
Guru
Guru
Bài viết: 546
Ngày tham gia: T.Bảy 16/04/2011 11:31 pm
Đến từ: Gò Dầu - Tây Ninh
Has thanked: 6 time
Been thanked: 98 time
Liên hệ:

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi Zeroplus » CN 25/11/2012 12:55 pm

  1. For i=0 to Pic.ScaleHeight -1
  2.       For j=0 to Pic.ScaleWidth -1
  3.             Mamau=getPixel(Pic.hdc,i,j)
  4.       Next
  5. Next


sửa For j=0 to Pic.ScaleWidth -1 thành For j=Pic.ScaleWidth -1 to 0 step -1

Hình đại diện của người dùng
ducpkh
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 511
Ngày tham gia: T.Sáu 24/08/2012 12:28 pm
Đến từ: ADAFA
Has thanked: 9 time
Been thanked: 27 time

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi ducpkh » CN 25/11/2012 6:38 pm

Mình đã sửa thế này nhưng bị lỗi. Bạn xem hộ mình lỗi j vậy?
Tập tin đính kèm
XAC DINH DIEM DEN.rar
(1.81 KiB) Đã tải 183 lần

Hình đại diện của người dùng
Zeroplus
Guru
Guru
Bài viết: 546
Ngày tham gia: T.Bảy 16/04/2011 11:31 pm
Đến từ: Gò Dầu - Tây Ninh
Has thanked: 6 time
Been thanked: 98 time
Liên hệ:

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi Zeroplus » CN 25/11/2012 9:26 pm

Mình xem qua code của bạn rồi. Giờ bạn tạo 1 project mới. Thêm control picture vào Form và đặt tên là Pic, Thêm cái hình có chấm đen đó vào Pic (chứ không phải thêm vào Control Image đâu nhé) . Nhớ set Scale Mode = 3-Pixel. Rồi mở khung code lên
  1. Option Explicit
  2. Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long ' Khai báo API
  3.  
  4. Private Sub form_load()
  5. Dim i As Integer, j As Integer, mamau As Long
  6. For i = 0 To Pic.ScaleHeight - 1
  7.       For j = 0 To Pic.ScaleWidth - 1
  8.             mamau = GetPixel(Pic.hdc, i, j)
  9.             If mamau = 0 Then Goto KT:
  10.       Next
  11. Next
  12. KT:
  13. Msgbox mamau
  14. End Sub
  15.  

Hình đại diện của người dùng
ducpkh
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 511
Ngày tham gia: T.Sáu 24/08/2012 12:28 pm
Đến từ: ADAFA
Has thanked: 9 time
Been thanked: 27 time

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi ducpkh » CN 25/11/2012 9:37 pm

nếu với Control Image thì sao không được hả bạn?

Hình đại diện của người dùng
ducpkh
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 511
Ngày tham gia: T.Sáu 24/08/2012 12:28 pm
Đến từ: ADAFA
Has thanked: 9 time
Been thanked: 27 time

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi ducpkh » T.Hai 26/11/2012 4:45 pm

Mình sử dụng với Image control thì được rồi nhưng giờ muốn lưu tọa độ đó mà không được? bạn có thể giúp đỡ mình được không?

Hình đại diện của người dùng
Zeroplus
Guru
Guru
Bài viết: 546
Ngày tham gia: T.Bảy 16/04/2011 11:31 pm
Đến từ: Gò Dầu - Tây Ninh
Has thanked: 6 time
Been thanked: 98 time
Liên hệ:

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi Zeroplus » T.Hai 26/11/2012 8:27 pm

ducpkh đã viết:nếu với Control Image thì sao không được hả bạn?

Vì image nó không có hDC nên không dùng được
ducpkh đã viết:Mình sử dụng với Image control thì được rồi nhưng giờ muốn lưu tọa độ đó mà không được? bạn có thể giúp đỡ mình được không?

Thì khi mà thoát khỏi hàm For. Tọa độ của nó là i,j đó. Bạn muốn lưu nó thành file txt thì ví dụ:
  1. Open "C:vb.txt" For Output As #1
  2. Print #1, i
  3. Print #1, j
  4. Close #1
  5.  

Hình đại diện của người dùng
ducpkh
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 511
Ngày tham gia: T.Sáu 24/08/2012 12:28 pm
Đến từ: ADAFA
Has thanked: 9 time
Been thanked: 27 time

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi ducpkh » T.Hai 26/11/2012 9:28 pm

Bạn cho mình hỏi. Mình sửa lại code với Image Control nhưng khi đó trả giá trị của i, j là kích thước của ảnh. Như vậy thì sai tọa độ của điểm đen? Code của mình như thế này
  1. Option Explicit
  2. Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long ' Khai báo API
  3.  
  4. Private Sub form_load()
  5. Pic.Top = 0
  6. Pic.Left = 0
  7. Image1.Left = 23
  8. Image1.Top = 9
  9. Dim i As Integer, j As Integer, mamau As Long
  10. For j = Image1.Left To Image1.Width - 1 'Pic.ScaleWidth
  11. For i = Image1.Top To Image1.Height - 1  ' Step -1
  12.            mamau = GetPixel(Pic.hdc, i, j)
  13.             If mamau = 0 Then GoTo KT:
  14.            
  15.       Next
  16. Next
  17. KT:
  18. Text1.Text = i
  19. Text2.Text = j
  20. 'MsgBox "i" & "j", vbOKCancel
  21.  
  22. End Sub
  23.  
  24.  

Như thế là bị sao bạn?

Hình đại diện của người dùng
Zeroplus
Guru
Guru
Bài viết: 546
Ngày tham gia: T.Bảy 16/04/2011 11:31 pm
Đến từ: Gò Dầu - Tây Ninh
Has thanked: 6 time
Been thanked: 98 time
Liên hệ:

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi Zeroplus » T.Ba 27/11/2012 12:02 pm

ducpkh đã viết:
  1. Option Explicit
  2. Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long ' Khai báo API
  3.  
  4. Private Sub form_load()
  5. Pic.Top = 0
  6. Pic.Left = 0
  7. Image1.Left = 23
  8. Image1.Top = 9
  9. Dim i As Integer, j As Integer, mamau As Long
  10. For j = Image1.Left To Image1.Width - 1 'Pic.ScaleWidth
  11. For i = Image1.Top To Image1.Height - 1  ' Step -1
  12.            mamau = GetPixel(Pic.hdc, i, j)
  13.             If mamau = 0 Then GoTo KT:
  14.            
  15.       Next
  16. Next
  17. KT:
  18. Text1.Text = i
  19. Text2.Text = j
  20. 'MsgBox "i" & "j", vbOKCancel
  21.  
  22. End Sub


Tại sao lại dùng tọa độ của Image Control để lấy pixel của Picture? Như vậy chả phải sai tọa độ rồi àk.

Hình đại diện của người dùng
ducpkh
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 511
Ngày tham gia: T.Sáu 24/08/2012 12:28 pm
Đến từ: ADAFA
Has thanked: 9 time
Been thanked: 27 time

Re: Nhờ mọi người về xác định điểm đen trong ảnh!

Gửi bàigửi bởi ducpkh » T.Ba 27/11/2012 4:46 pm

Theo mình hiểu thì: picture chứa Image và mình lấy pixel của Picture chính là lấy của Image khi đó tọa độ phải là tọa độ của Image!


Quay về “Visual Basic 6 và Visual Basic Script (VB & VBS)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.15 khách